воскресенье, 17 декабря 2017 г.

PHP. Интересный способ для работы с индексированными массивами. list.

list — присваивает переменным из списка значения подобно массиву.
Подобно array(), это не функция, а языковая конструкция. list() используется для того, чтобы присвоить списку переменных значения за одну операцию.
list() работает только с индексированными массивами и принимает числовые индексы начиная с 0.

суббота, 2 декабря 2017 г.

Альтернативный синтаксис PHP

Рассмотрим примеры использования синтаксиса. Например, для вывода переменной внутри HTML структуры нужно написать:
<?php echo $string; ?>
В альтернативном варианте это можно записать как: <?= $string ?>

среда, 22 ноября 2017 г.

Bootstrap за 5 минут. Сетка

Основными элементами платформы Twitter Bootstrap 3 для создания сетки сайта являются:
    Контейнеры (элементы div с классом ".container" или ".container-fluid");
    Ряды (элемент div с классом ".row");
    Блоки div, состоящие из колонок Bootstrap (элемент div с одним ".col-#-$" или несколькими классами ".col-#-$").

суббота, 18 ноября 2017 г.

MySQL. Урок 23. Группировка. GROUP BY. Операторы WITH ROLLUP, HAVING.

-- Группировки могут быть по одному или нескольким полям.
DROP TABLE IF EXISTS table_group;

MySQL. Урок 22. Агрегатные функции COUNT(), AVG(), SUM(), MIN(), MAX().

 -- Агрегатные функции.

MySQL. Урок 21. Функции даты и времени. YEAR(), MONTH(), DAY(), HOUR(), MINUTE(), SECOND(), DATE_ADD(), NOW(). Полнотекстовый поиск. Операторы MATCH AGAINST. Режимы поиска NATURAL LANGUAGE MODE, IN BOOLEAN MODE.

 -- Функции даты и времени: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html

MySQL. Урок 20. Выборка данных с помощью оператора SELECT. Использование оператора LIKE для поиска на совпадение. Использование языка регулярных выражений для поиска с помощью функции REGEXP. Оператор IN.

-- NULL - нет значений.
SELECT * FROM country
WHERE indepyear IS NULL \G

MySQL. Урок 19. Оператор выборки данных SELECT. Предикаты, клаузулы, фильтры. Операторы WHERE, ORDER BY, ASC, DESC, BETWEEN, DISTINCT.

 -- SELECT
-- Фильтры, клаузулы, предикаты.

MySQL. Урок 18. Возможности оператора SELECT. Использование числовых функций ABS() и др. Создание переменных. Оператор SET. Изменение названий выводимых колонок оператором AS. Демонстрационная база данных MySQL world. Программа WORKBENCH. Reverse engineering с помощью программы WORKBENCH.

По этой ссылке можно скачать world БД:

MySQL. Урок 17. Обновляем записи в таблицах. Оператор UPDATE. Оператор BETWEEN. Функция CONCAT().

-- Обновление данных.

MySQL. Урок 16. Удаляем информацию из таблиц оператором DELETE. Используем фильтр WHERE для выборочного удаления. Операторы приоритета LOW_PRIORITY, QUICK. Оператор IGNORE. Удаление последней записи с использованием операторов ORDER BY, DESC, LIMIT.

-- DELETE - УДАЛЕНИЕ ИНФОРМАЦИИ.
DELETE FROM table7;

MySQL. Урок 15. Загрузка данных на сервер. Способ загрузки с отключенными индексами. Операторы DISABLE KEYS, ENABLE KEYS. Способ загрузки из файла. Оператор LOAD DATA INFILE. Операторы приоритета при загрузке LOW_PRIORITY, HIGH_PRIORITY, DELAYED.

-- Удаляем таблицу.
DROP TABLE IF EXISTS table3;

MySQL. Урок 14. Операторы добавления записей в таблицу. INSERT INTO. Оператор IGNORE. Добавление записей в таблицу на основе запросов из других таблиц.

-- Операторы манипулирования данными.
-- Оператор INSERT.

MySQL. Урок 13. Внешние связи между таблицами. Операторы FOREGN KEY, REFERENCE, ON DELETE CASCADE | RESCTRICT.

-- Такие связи могут быть только при движке InnoDB.
-- Связываются поля с одинаковым типом данных.
-- Индексируем колонки в дочерней таблице и устанавливаем ссылку на колонку в родительской таблице.
-- Дочерняя таблица опирается только на PRIMARY KEY и UNNIQUE KEY.

MySQL. Урок 12. Установим ограничения на PRIMARY KEY, UNIQUE KEY. Оператор CONSTRAINT.

-- Ограничения.

MySQL. Урок 11. Создаем индексы и удаляем их командами CREATE INDEX, DROP INDEX. Уникальные ключи UNIQUE KEY.

-- Индексы и ограничения.
-- Индекс - сортированные массивы.

MySQL. Урок 10. Information_schema – хранение метаинформации баз данных. Достаем информацию по отдельным таблицам и по отдельным колонкам.

--Посмотрим наши БД.
SHOW DATABASES;

MySQL. Урок 9. Модифицируем таблицы операторами ALTER TABLE. Удаляем и добавляем колонки, меняем тип данных в колонках, удаляем колонки, меняем кодировку колонок, добавляем PRIMARY KEY.

-- Выберем БД и поменяем кодировки
USE lessons;
SET NAMES 'cp866';

MySQL. Урок 8. Создание временных таблиц. CREATE TEMPORARY TABLE.

-- Таблица может быть временной. Она также создается 3 способами.

MySQL. Урок 7. Создаем таблицу по образцу, создаем таблицу на основе запроса.

Создание таблицы, копируя структуру другой таблицы.

MySQL. Урок 6. Создадим таблицы, задаим PRIMARY KEY, AUTO_INCREMENT. Задаем кодировки и коллейшены для всей таблицы и для отдельных столбцов командами CHARACTER SET и COLLATE. Задаем движок для таблицы оператором ENGINE.

-- Если в таблице мы создаем PRIMARY KEY, то мы можем задать AUTO INCREMENT, т.е увеличение на единицу.
-- PRIMARY KEY - индекс, который помогает БД искать информацию.

MySQL. Урок 5. Создаем таблицы. CREATE TABLE, задаем тип данных, наличие или отсутствие знака SIGNED, UNSIGNED. Задаем NULL, NOT NULL, задаем комментарии для каждого столбца и для всей таблицы.

-- Таблицы создаются 3 способами и бывают 2 видов.

MySQL. Урок 4. Создаем базу данных. Несколько слов о движках InnoDB, MyISAM. Задаем кодировку для базы данных CHARACTER SET, и способ сравнения строк COLLATE.

MyISAM - более быстрый. InnoDB - может обеспечить внешние связи между таблицами.

MySQL. Урок 3. Создаем базы данных. Удаляем базы данных. Операторы CREATE DATEBASE, DROP DATABASE, IF EXISTS, IF NOT EXISTS, комментарии.

-- Создание БД
CREATE DATABASE lessons;

MySQL. Урок 2. Типы данных. Команды SET NAMES, SHOW.

Установим кодировку: SET NAMES 'cp866';

MySQL. Урок 1. Введение.

Запустим MySQL из консоли. В этих уроках мы используем Denwer.

воскресенье, 5 ноября 2017 г.

четверг, 26 октября 2017 г.

Mod_rewrite

Что такое mod_rewrite?

Вспомните последнее посещение интернет-магазина. Найдя нужный товар, вы, вероятно, увидели примерно такой URL:

buy-online.com/новое_и_лучшее/нужная_категория_товара/искомый_товар

Это происходит не потому, что разработчики этого сайта потратили уйму времени, чтобы настроить отдельные директории для разных категорий товара, а благодаря удобному модулю по имени mod_rewrite. Данный модуль позволяет создавать пользовательские и упрощенные URL-адреса. На самом деле URL выглядит примерно так:

http://www.buy-online.com/gp/itemB004RYVI0Q/ref=as_li_ss_tl?


среда, 11 октября 2017 г.

Соцсеть. Кликабельные результаты поиска. Урок 42. НЕЗАКОНЧЕНО!

Ребята! Поскольку компьютер сгорел, да еще и подвергся хакерской атаке, весь проект был утерян. Надеюсь, что вернусь к нему позже.

Кликабельные результаты поиска.

Соцсеть. Дизайн поиска. Урок 41.

Автозаполнение поиска.

Соцсеть. Поиск. API. Урок 40.

Поиск постов. Работаем с API.

Соцсеть. Дизайн комментариев. Урок 39.

Дизайн страницы профиля.

Соцсеть. Дизайн комментариев. Урок 38.

Дизайн комментариев.

воскресенье, 8 октября 2017 г.

Соцсеть. Дизайн страницы создания аккаунта. Урок 35.

Создание аккаунта.

Соцсеть. Дизайн страницы с логином. Урок 34. Справка об php://input

Сделаем дизайн страницы login.php

Простое API. Удаление токена. Урок 3.

index.php

Простое API. Ответы. Урок 2.

Ответы.

Простое API. HTTP. Урок 1. Справка о методе PUT.

Простое API. HTTP. Урок 1. Справка о методе PUT.

понедельник, 25 сентября 2017 г.

Соцсеть. Верификация пользователей. Урок 12.

Добавим в таблицу user поле verified.
boolean,  как определено 0

Соцсеть. Кнопка Unfollow. Урок 11.

Unfollow кнопка.

Соцсеть. Профайлы пользователей и кнопка Follow. Урок 10.

Профайлы пользователей.

Соцсеть. Напоминание пароля. Урок 9.

Напоминание пароля.
Алгоритм.

воскресенье, 17 сентября 2017 г.

Соцсеть. Валидация данных. Урок 3.

Валидация данных.

Переводы Laracasts. Передача данных в шаблоны

(0:00)
Итак, в последнем видео, у нас было введение о некоторых ключевых компонентах в Laravel — включая маршрутизацию, которая находится в каталоге app/http. Мы также создали некоторые маршруты и затем узнали о том, как они отправляются к нашим методам контроллеров, которые, в свою очередь, загружают виды (views).
Сейчас это всё ещё несколько ново, так что давайте ещё немного с этим поработаем. И в процессе узнаем о том как мы можем передавать переменные в наши виды.

суббота, 16 сентября 2017 г.

Соцсеть. Внесение пользователя в БД. Урок 2.

Регистрация аккаунтов.
Создадим в корне файлы index.php, login.php, create-account.php

Соцсеть. Создание БД. Урок 1.

Создадим базу данных. Назовем ее SocialNetwork.

Переводы Laracasts. Введение в маршрутизацию, контроллеры и представления

 (0:00)
Итак, вы долго ждали, и я думаю пришло время увидеть код Laravel. Я загружу сервер, и мы сделаем несколько изменений, чтобы вы поняли основной процесс – как загрузить «представление» и вывести результат в окно браузера.
Если вы хотите использовать локальный сервер, то можете сделать так:

php -S localhost:8888 -t public
И не забудьте установить корень документов (document root) на директорию /public. Если вы это сделаете и переключитесь в Chrome – увидите Laravel.

(0:30)
Или, если вы прошли второй урок и научились работе с Homestead, то как в таком случае будет выглядеть результат? Давайте быстренько посмотрим. Я переключусь обратно в окно терминала и с помощью ssh войду в нашу VM:

homestead ssh
И вы увидите что Laravel Homestead включает в себя команду serve. Заметьте что мы даём ей имя домена и путь, по которому должен находиться корень документов. Давайте попробуем. Мы пишем: serve,... как насчёт доменного имени laravel5.dev?

(1:00)
Наш путь будет внутри директории /home/Vagrant/Code, имя папки /learning-laravel-5, а корневой путь в /public. Итак:

serve laravel5.dev /home/Vagrant/Code/learning-laravel-5/public
Запустим эту команду. Это настроит nginx. Также, не забудьте, у нас собственный локальный домен, так что нужно поправить наш файл hosts.
В новой закладке терминала выполним:

sudo vi /etc/hosts
Внутренне наш IP останется тем же, но домен будет laravel5.dev. И готово. Посмотрим, сработает ли.

(1:30)
Если я переключусь в Chrome и открою laravel5.dev – всё работает через Homestead. Так что сами решайте, работать через встроенный сервер PHP или через VM c Homestead. Если вы поопытнее, я бы рекомендовал Homestead (там больше гибкости). Но если вы только пробуете построить свой первый сайт и изучаете первый фреймворк – это нормально, если вы пока остановитесь на простом сервере PHP. Итак, давайте перейдем к исходному коду.


(2:00)
Теперь, не знаю как вы, но я всегда когда вижу новый фреймворк, то структура папок сразу кажется мне ошеломительной. Все эти термины, о которых я ничего не знаю. Что это за Console? Или Commands? Events? Handlers, Providers, и Services? Слишком много всего! Так ведь? Это нормально. Вы освоите их шаг за шагом. Я обещаю вам, что они не настолько сложны, как может сначала показаться. Но для начала, давайте будем придерживаться основ.


(2:30)
Как мы получили эту статичную страницу приветствия («Welcome page»)?
Что же, всегда когда вы впервые открываете приложение на Laravel, вам нужно перейти в файл routes. И вы найдете его в /app/Http (считайте что эта папка инкапсулирует всю логику приложения по работе с HTTP). Здесь находятся маршруты. Итак, если посмотрим, там уже есть несколько предустановленных. Но сейчас нам интересен лишь этот:

Route::get('/', 'WelcomeController@index');

(3:00)
Итак, возможно вы пришли из старого (legacy) PHP-приложения, где структура папок определяет, как выглядит URL. Например, если вы хотели создать страницу по адресу блога, то вы бы создали папку /blog и в ней index.php.
Затем при переходе на example.com/blog вы бы увидели результат. Так? Ну как вы возможно догадались – это достаточно негибкий способ. Вместо этого мы специально объявим каждый маршрут в нашем приложении. И к счастью, Laravel делает это так просто как это только возможно.


(3:30)
Давайте вместе прочитаем что тут написано. У нас есть новый маршрут, и когда пользователь исполняет GET-запрос (GET-запрос – это просто тип запроса, самый лёгкий для понимания)... Просто думайте о GET как «когда я посещаю эту страницу»… Хм, какую страницу? Корневую (/ или root) страницу — то есть домашнюю страницу вашего сайта. Что нужно сделать дальше? Я хочу загрузить конкретный метод, и это должен быть метод от нашего контроллера.


(4:00)
Итак, мы говорим: «ищи WelcomeController, и вызови на нём метод с названием index()». Давайте посмотрим где его искать. Вот директория Controllers, вот WelcomeController.php, и если я прокручу текст ниже – вот этот метод index(). Он отвечает за обработку вызова к домашней странице. Давайте попробуем нечто простое:

return 'hello world!';

(4:30)
Отлично. Идём обратно, обновим, и вуаля! Легко и просто. Сделаем ещё один? Если я перейду в файл routes.php… вы будете часто видеть как я это делаю (вместо перехода к боковой панели и поиску файла). Так что лучше выберите себе хороший редактор, позволяющий очень быстро набирать имя и переходить к нужному файлу.
Хорошо. Как насчет обязательной страницы контактов? Давайте напишем её вместе. Повторяйте мои действия!


(5:00)
У нас новый маршрут, и когда мы получаем GET-request к странице contact (которую нужно писать так: /contact, но слэш можно опустить). Затем куда мы хотим пойти? В какой метод нам стоит направить запрос? Давайте пока будем придерживаться WelcomeController, хотя в действительности, я бы создал отдельный контроллер, возможно какой-то общий PagesController для статичных страниц на моём сайте. В любом случае, пока придержимся этого варианта, и вызовем метод contact():

Route::get('contact''WelcomeController@contact');

(5:30)
Хорошо, мы настроили новый маршрут. Перейдем обратно в WelcomeController.php. Я добавлю тут новый метод:

public function contact()
{
  return 'Contact me';
}
(Пока что просто жёстко пропишем здесь «Contact me»). Так, посмотрим, работает или нет. Открываем:
laravel5.dev/contact
и вот она. Ваша самая первая страница! Поздравляю!
В самом деле, заметьте, это совсем несложно. Нужно всего лишь понять основной принцип работы. И я обещаю, вы по-настоящему полюбите Laravel, когда выучитесь всем этим штукам.


(6:00)
В данных двух примерах мы всего лишь возвращаем строки. За кулисами Laravel распознает и выберет подходящий ответ. В реальной жизни мы не возвращаем строки. Возможно код вернет что-то типа JSON, если вы строите API, но для типичного веб-приложения, вы скорее всего загрузите HTML-код. Это и есть «вид» (view — представление, шаблон). В Laravel думайте о виде, как о неком подставном шаблоне. Он очень простой – лишь дайте ему данные и он отобразит их для пользователя.


(6:30)
Все ваши виды будут храниться в директории /resources/views. Заметьте, это будет базовая директория. Нам не нужно писать полностью resources/views/welcome. Также не нужно беспокоиться и о расширении (типа welcome.blade.php). В этом нет необходимости. Просто пишите welcome. А может файл внутри поддиректории, как это довольно часто бывает — ведь у вас будет куча видов и вам стоит правильно их организовать.


(7:00)
Если у вас к примеру форум, то сделайте /views/forum/[name-of-the-view]. В таких случаях можно обращаться к нему как forum/name. Или если хотите, можно сделать это более объектно-ориентированным на вид используя точку вместо слэша: forum.name


(7:30)
Laravel будет искать его в директории resources/views/forum, и затем в файле name.php или name.blade.php. Но, в нашем случае, мы используем просто welcome:

return view('welcome');
Теперь заменим вот на это:
return view('pages.contact');
(Возможно я хочу папку /pages, и вид с названием contact). Хорошо, давайте создадим его. Вот здесь. Новый файл. Внутри pages/contact.blade.php.
Насчёт Blade – возможно вам незнаком этот термин. Это шаблонизатор Laravel. Вы полюбите его. Но мы разберемся с ним чуть позже.


(8:00)
ОК, для начала я просто вставлю здесь большой блок HTML-кода. Позднее я покажу вам как подчистить здесь всё, используя штуки типа мастер-страниц. Итак, я всего лишь напишу:

<h1>Contact Me!</h1>
Хорошо. Это всё что нам было нужно. Давайте еще раз посмотрим на рабочий процесс, и затем посмотрим на это в браузере. Мы определили наш маршрут так, что при GET-запросе к example.com/contact мы направляем его к контроллеру, который как бы жонглирует всем миром приложения.

(8:30)
Он получает запрос (типа «Я хочу увидеть страницу contact») и возвращает ответ: «Вот твоя страница». Так или иначе, в том классе мы ссылаемся на метод contact(). Теперь, если мы переключимся туда, в наш метод contact(), то мы только лишь загрузим вид pages/contact. И конечно же, вид – это просто базовый HTML для примера. Хорошо, посмотрим на это в браузере. Переключусь обратно и обновлю. И вот оно – мы загрузили наш вид.



(9:00)
Отлично! Итак, это было ваше первое введение, очень лёгкое введение в основы маршрутизации. Вы ознакомились с тем как выглядит контроллер, и как мы загружаем вид. Как вы можете представить, в будущих уроках мы разберёмся с этим намного глубже. Надеюсь, вам интересно!

Laravel. Блог. Likes, dislikes на Vue. Не закончено!

пятница, 15 сентября 2017 г.

Как установить NPN на Open Sever

Внимание! Получается в последствии работать через командную строку Windows. Мы заходим в папку с проектом и пишем команду npm install. После окончания инсталяции нам нужно собрать проект. Мы пишем команду npm run watch
А до этого инсталируем все на Open Server. 

пятница, 1 сентября 2017 г.

Laravel. Блог. Удаление и редактирование поста

Реализуем удаление и редактирование постов.

Laravel. Переменная $loop

 Переменная $loop — объект stdClass, предоставляющий метаданные того цикла, в котором вы сейчас находитесь. Посмотрите на её свойства:

Laravel. Блог. Продолжаем делать админку

Откроем контроллер \app\Http\Controllers\Admin\TagController.php
public function store(Request $request)
{
return $request->all();
}

пятница, 25 августа 2017 г.

Редирект в php при уже заданных заголовках.


Часто в процессе разработки сайта бывает необходимо сделать редирект на какаю-нибудь страницу. Это потребность может возникать как перед выводом html кода на страницу, так и в середине страницы и в конце.

пятница, 18 августа 2017 г.

Laravel. Блог. Установка Laravel и загрузка шаблона

Инсталяция на Open Server.
Открываем консоль Open Server.
Переходим в директорию с сайтами: cd domains
Пишем команду:
composer create-project --prefer-dist laravel/laravel blog.my
После окончания установки перезапустим сервер.

суббота, 22 июля 2017 г.

LARAVEL. АУТЕНТИФИКАЦИЯ ПОЛЬЗОВАТЕЛЕЙ. ЧАСТЬ 1.

https://laravel.com/docs/5.4/authentication

Аутентификация — процесс проверки пользователя, т.е сравнение введенных логина и пароля с данными зарегистрированных пользователей сайта.

пятница, 21 июля 2017 г.

LARAVEL. СООБЩЕНИЯ ОШИБОК ВАЛИДАЦИИ

Сообщение об ошибках формируется в текущей локализации Laravel.
\config\app.php Текущая локлизация: 'locale' => 'en',

Адрес локализации: \resources\lang\en\validation.php

вторник, 11 июля 2017 г.

LARAVEL. ИСПОЛЬЗОВАНИЕ МОДЕЛЕЙ. ЧАСТЬ 1.

Модель — объект определенного класса, в свойствах которого отображаются данные полей таблицы.
Модели находятся в папке app.
Имя модели должно быть в единственном числе и совпадать с таблицей БД.

воскресенье, 9 июля 2017 г.

LAREVEL. КОНСТРУКТОР ЗАПРОСОВ

Конструктор — специальный класс с набором методов, каждый из которых формирует определенную часть запроса.

пятница, 7 июля 2017 г.

LAREVEL. ПОСЕВ ДАННЫХ.

Механизм наполнения БД начальной информацией при помощи специальных классов, которые находятся по адресу: database\seeds
По умолчанию доступен один класс — DatabaseSeeder. Но через консоль можно создать свои пользовательские классы.

четверг, 6 июля 2017 г.

LARAVEL. МИГРАЦИИ

Миграции - упрощенная система контроля версий для БД, которая позволяет отслеживать изменения и создавать таблицы БД, используя команды консоли.
И методы специального конструктора таблиц класса схема.

воскресенье, 2 июля 2017 г.

LARAVEL. ШАБЛОНИЗАТОР BLADE. ЧАСТЬ 2

Открываем IndexController.php и добавим туда массив переменных:

LARAVEL. ШАБЛОНИЗАТОР BLADE. ЧАСТЬ 1

Шаблонизатор - приложение, которое используется для подстановки данных в определенные указанные места шаблона и формирование окончательного вида проекта.

Шаблон - документ, который содержит в себе html-теги, т.е оформление и структуру страницы, а также специальные метки, в которые подставляются данные из логической части.
В шаблоне Blade не должно быть ни одной строки на php, т.к вся логика для формирования дизайна заменяется на специальные метки и конструкции шаблонизатора.
Которые в последствии при компиляции будут заменены на строки кода в php.
Шаблоны располагаются \resourse\views
Скомпилированные шаблоны располагаются в \storage\framework\views
Файл шаблона должен храниться с расширением blade.php!

пятница, 30 июня 2017 г.

LARAVEL. КЛАССЫ-ПОСРЕДНИКИ

Классы-посредники или Middleware - фильтры обработки http-запросов.
Например, если пользователь не авторизован, то класс-посредник отправляет его на страницу авторизации.
Это некие слои, которые должен пройти запрос прежде чем он будет обработан. Если запрос не проходит, то он куда-либо перенаправляется.
Запросы по цепочке передаются от посредника к посреднику.

четверг, 29 июня 2017 г.

LARAVEL. КОНТРОЛЛЕРЫ

Контроллеры позволяют вынести код обработчика роутера в отдельный файл.
Контроллер решает какой вид использовать и какие данные запросить у модели. Вместо функции запрос пользователя обрабатывает контроллер.
Адрес контроллеров: \app\Http\Controllers
Имя файла должно соответствовать имени будущего класса: FirstController.php

вторник, 27 июня 2017 г.

LARAVEL. МЕТОДЫ РЕГИСТРАЦИИ МАРШРУТОВ

Машрутизация - получение части запроса пользователя, который следует после базового url и ее разложения на параметры для определения того, какой контроллер и какое действие данного контроллера должны выполнить поставленный запрос. И передача управления определенному контроллеру.
Это процесс разбора части URI и поиска совпадения с описанным ранее маршрутом или роутером.
И последующим вызовом на исполнение обработчика найденного маршрута.

понедельник, 26 июня 2017 г.

LARAVEL. ПРИНЦИП ДЕЙСТВИЯ ФРЕЙМВОРКА

Использует MVC.
Вид - это шаблон. Он не содержит логики. Контроллер - блок, который получает данные от пользователя. Обрабатывает, нормализует, проверят правильность ввода. И передает данные в модель.
Контроллер не должен содержать никакой информации о внешнем виде приложения.
Модель - основа логики приложения. Отвечает за расчеты, выборку информации из БД, изменение информации в БД и т. д. Моделью можно представить библиотеку функций.

воскресенье, 25 июня 2017 г.

LARAVEL. НАСТРОЙКИ ФРЕЙМВОРКА

Настройки в файле .env

LARAVEL. ФАЙЛОВАЯ СТРУКТУРА ФРЕЙМВОРКА

app - основная логика: модели, контроллеры, посредники и промежуточные фильтры, роутеры.
По умолчанию все классы данного каталога описаны в пространстве имен App, но мы можем назначить свое пространство имен.
Благодаря пространству имен обеспечивается автоматическая загрузка классов по стандарту PSR4.
Пространство имен формирует путь к файлу, в котором описан данный класс.

суббота, 24 июня 2017 г.

PHP. Логические операции

<?php
// Логические операции
$x = 10;
$y = 0;
$b_1 = $x > 10;
$b_2 = $y == 0; // == - проверка на равенство
echo "x = $x; y = $y <br />";
echo "x > 10 = $b_1; (y == 0) = $b_2 <br />"; // x > 10 = ; (y == 0) = 1

$b_1 = true;
$b_2 = false;
echo "b_1 = $b_1; b_2 = $b_2 <br />"; // b_1 = 1; b_2 =

// Логическое отрицание:
echo 'Отрицание b_1: '.!$b_1.'<br />'; // Отрицание b_1: | Меняет true на false.

// Логическое сложение:
echo 'b_1 ИЛИ b_2: '.($b_1 || $b_2).'<br />'; // 1. Возвращают истину, если один или оба значения равны true.
// Как запомнить: 0+1 = 1, 1+1 = 2, 0+0=0

// Логическое умножение:
echo 'b_1 И b_2: '.($b_1 && $b_2).'<br />'; // false. Возвращают истину, если оба значения равны true.
// Как запомнить: 0*0 = 0, 0*1 = 0, 1*1 = 1

// Исключающее ИЛИ:
echo 'b_1 Исключающее ИЛИ b_2: '.($b_1 xor $b_2).'<br />'; // 1. Возвращают истину, если значения операндов имеют разные значения.

echo (!($b_1 && $b_2) xor (!$b_1 || $x < 10)) . '<br />'; // 1

// Проверка на эквивалентность
$x = 5;
$y = '5';
echo 'Результат проверки на равенство x и y ' . ($x == $y) . '<br />'; // 1
echo 'Результат проверки на эквивалентность x и y ' . ($x === $y) . '<br />'; // false. Равенство значений одного типа.

Миникурс по Laravel. Урок 6.

Реализуем механизм удаления статьи.
В routes/web.php

четверг, 22 июня 2017 г.

PHP. Строковые операции

<?php
// Строковые операции
$s_1 = "My string";
$s_2 = "New string";

Миникурс по Laravel. Урок 3.

Используемые функции:
all() делает выборку всех полей, возвращает объект класса collection.
select() позволяет указать выбираемые поля.
dump() распечатывает массивы и объекты

Миникурс по Laravel. Урок 2.

Используемые методы:
with - вернуть переданный объект. Полезно при сцеплении методов в PHP 5.3.x.

asset - сгенерировать URL ко внешнему ресурсу (изображению и пр.).
$url = asset('img/photo.jpg');

Миникурс по Laravel. Урок 1.

среда, 21 июня 2017 г.

PHP. Математические операции

<?php
   // Математические операции

CakePHP3. Пишем сайт по уроку из Youte.

Ссылка на урок: https://www.youtube.com/watch?v=pCB5ShwtHdw&t=472s

CakePHP3. Установка консоли для CakePHP3 в Windows

Если вы используете XAMPP.
В системных путях нужно прописать в системных переменных путь к нашему php.
C:\xampp\php

CakePHP3. Как установить CakePHP3 на Windows

Версия PHP должна быть не ниже 5.6. В php.ini должны быть включено openssl.

вторник, 20 июня 2017 г.

PHP. Константы

<?php
// Константы - величина, которая никогда не меняет своего значения.
// Согласно стандартам название константы пишется с большой буквы.

PHP. Ссылочные переменные

<?php
// Ссылочные переменные

// Первый тип ссылочных переменных - жесткие ссылки.
// Жесткая ссылка - копия той же самой переменной, но уже с другим именем.
// Разные переменны ссылаются на одну и ту же область памяти.
// Любые манипуляции с переменной а будут затрагивать переменную b и наоборот, т.к они ссылаются на одну и ту же ячейку памяти.

суббота, 17 июня 2017 г.

воскресенье, 30 апреля 2017 г.

пятница, 21 апреля 2017 г.

Загрузка файлов. Перемещение загруженных файлов

При перемещении файлов нам нужно знать:
1) какой файл мы хотим переместить:
 $tmp_file = $_FILES['file_upload']['tmp_name'];
$target_file = basename($_FILES['file_upload']['name']);

basename - дает только имя файла, которое в конце.

2) куда мы хотим его поместить: $upload_dir = "uploads"

3) переместим загруженный файл:
move_uploaded_file($tmp_file, $upload_dir."/".$target_file);

Перемещает только те файлы, которые были загружены и находятся во временной директории.

четверг, 20 апреля 2017 г.

Загрузка файлов. Ошибки загрузки

Есть 8 типов ошибок, которые можно получить.

Загрузка файлов. Инспектирование загруженных файлов

При отправке файлы не помещаются в суперглобальную $_POST, а помещаются в суперглобальныю $_FILES. В $_POST помещается все остальное содержимое.

Получить доступ к ним можно следующим образом: $_FILES['form_input']

Загрузка файлов. Отправка файлов как данных формы

В форме указываем: enctype="multipart/form-data"
В input должен стоять  type="file"
Обязательно указываем строку: <input type="hidden" name="MAX_FILE_SIZE" value="1000000"/> <!-- Размер примерно 1 МБ -->
MAX_FILE_SIZE не может быть больше максимального размера файла в настройках php.ini

Загрузка файлов. Конфигурирование PHP для загрузки (аплоада) файлов

Для загрузки файлов в php.ini 
file_uploads: On должна быть включена.
upload_tmp_dir: NULL - временная директория, в которую будут загружаться файлы. 
post_max_size: 8 M - размер запроса POST
upload_max_filesize: 2 M  - размер загружаемого файла.
max_execution_time: 30 sec - время выполнения, как долго PHP будет пытаться выполнить эту задачу, сколько времени он будет ждать получение этого файла.
max_input_time: -1 (no limit)  - время обработки
memory_limit: 128М - ограничение памяти или сколько памяти позволяет использоваться скрипту.

* Здесь указаны максимальные размеры по умолчанию.

воскресенье, 16 апреля 2017 г.

PHP. Работа с файлами. Просмотр содержимого директории

opendir() - открывает дескриптор каталога.
readdir() - получает элемент каталога по его дескриптору.
closedir() -  освобождает дескриптор каталога.

пятница, 14 апреля 2017 г.

PHP. Работа с файлами. Работа с директориями

Узнаем, как работать с директориями, которые содержат наши файлы.

getcwd — текущая рабочая директория.
mkdir — создаёт директорию в текущей папке.
chdir — изменяет каталог. Это работает, как указатель.
rmdir — удаляет директорию.

четверг, 13 апреля 2017 г.

PHP. Работа с файлами. Определение деталей файла

filemtime — возвращает время последнего изменения контента файла.
filectime — возвращает время изменения индексного дескриптора файла.
fileatime — возвращает время последнего доступа к файлу.

touch — устанавливает время доступа и модификации файла.

pathinfo — возвращает информацию о пути к файлу.

PHP. Работа с файлами. Чтение файлов

fread — бинарно-безопасное чтение файла.
string fread ( resource $handle , int $length )

nl2brвставляет HTML-код разрыва строки перед каждым переводом строки.

filesizeвозвращает размер файла.

file_get_contentsчитает содержимое файла в строку.

feof — проверяет, достигнут ли конец файла.

fgets — читает строку из файла
string fgets ( resource $handle [, int $length ] )

handle -    указатель на файл должен быть корректным и указывать на файл, успешно открытый функциями fopen() или fsockopen() (и все еще не закрытым функцией fclose()).
length -  чтение заканчивается по достижении length - 1 байт, если встретилась новая строка (которая включается в возвращаемый результат) или конец файла (что встретилось первым). Если длина не указана, чтение из потока будет продолжаться до тех пор, пока не достигнет конца строки. 

PHP. Работа с файлами. Перемещение указателя в файле

ftell сообщает текущую позицию чтения/записи файла.
int ftell ( resource $handle )

fseek устанавливает смещение в файловом указателе.

rewind сбрасывает курсор у файлового указателя. Сбрасывает курсор файлового указателя handle на начало файлового потока. 

среда, 12 апреля 2017 г.

PHP. Работа с файлами. Удаление файлов

1) Нужно закрыть файлы, которые мы хотим удалить. Мы не можем удалить открытые файлы.
2) У нас должны быть разрешения записи для директории, папки, которая содержит файл.

// Удаление файла производится всего одной командой.
unlink("filetest.txt");

PHP. Работа с файлами. Запись в файлы

fwriteБинарно-безопасная запись в файл

 int fwrite ( resource $handle , string $string [, int $length ] )

fwrite() записывает содержимое string в файловый поток handle. 

PHP. Работа с файлами. Доступ к файлам

fopen — Открывает файл. Если файл не существует, то он создается.
fopen(filename, mode)

понедельник, 10 апреля 2017 г.

PHP. Работа с файлами. Понимание разрешений файлов

Одна из причин почему нужно использовать разрешение для файлов - это безопасность, которую они дают. Это дополнительный слов безопасности, который дает уверенность, что папки и файлы будут защищены от постороннего доступа.
Загружаемые файлы должны помещаться с свою отдельную от кода директорию!

PHP. Основы файловой системы

Прежде чем создать файл нужно убедиться, что он еще не существует. Или после создания файла нужно убедиться, что он существует. Или нужно проверить существование файла прежде, чем читать его. Или убедиться, что это файл, а не директория.

суббота, 1 апреля 2017 г.

PHP ООП. Сравнение объектов

Можно использовать 2 оператора:
1) оператор сравнения ==
Сравнивается имеют ли два объекта одинаковые атрибуты, одинаковы ли они по сути.

2) более строгий оператор идентичности ===
Требует, чтобы 2 сравниваемых объекта ссылались на один и тот же объект.

PHP ООП. Клонирование объектов

$c = clone $a;

Метод __clone()  работает, как конструктор.
function __clone() {
echo  "Existing beverage was cloned. <br />";
}

PHP ООП. Использование конструкторов и деструкторов

Конструкторы или деструкторы - это специальные методы, которые автоматически вызываются, когда объект создается или уничтожается.
В PHP4 конструкторы носили такое же имя, как и класс. У класса имя Table и у функции имя Table.
Сейчас: function ____construct() {}
Конструкторы могут принимать аргументы. function ____construct($leg_count=4) {}

Деструкторы function __destruct() {} используются редко, потому что объект редко нужно уничтожать.

PHP ООП. Ссылка на родительский класс

parent::modified_a();
Когда работаем со статическими методами, то используем parent::
Единственное когда это нужно использовать с методами экземпляра, когда мы пытаемся получить доступ к родительскому методу.

PHP ООП. Оператор разрешения области видимости

Оператор разрешения области видимости Student::$total_students
Оператор разрешения области видимости (также называемый "Paamayim Nekudotayim") или просто "двойное двоеточие" - это лексема, позволяющая обращаться к статическим свойствам, константам и перегруженным свойствам или методам класса. При обращении к этим элементам извне класса, необходимо использовать имя этого класса. 

пятница, 31 марта 2017 г.

PHP ООП. Работа с модификатором static

Статичные переменные и методы нужно использовать, когда нет экземпляра.

Student::$total_students
Student::welcome_students()
self::$total_students++

Статичные методы должны идти вместе и вызывать статичные вещи. Не смешивайте статичные и нестатичные методы.

PHP ООП. Использование сеттеров и геттеров

Придании свойствам области видимости "Приватное" не ограничивает доступа к ним через методы. Геттеры и сеттеры - методы с упрощенным (не явным) синтаксисом вызова. Свойство к которому никто не имеет доступа не имеет смысла.

PHP ООП. Установка модификаторов доступа

public = делает метод доступным отовсюду.

private = доступный только внутри этого класса.

protected = можно вызывать из этого класса и подклассов этого класса.

PHP ООП. Понимание наследования класса

extends
Есть возможность наследовать все атрибуты и методы. Также можем их переписать, если не хотим их использовать.
get_parent_class — возвращает имя родительского класса для объекта или класса.

is_subclass_of — проверяет, содержит ли объект в своем дереве предков указанный класс либо прямо реализует его.

четверг, 30 марта 2017 г.

PHP ООП. Определение свойств класса

Свойства класса - это обычные переменные только внутри класса.

PHP ООП. Ссылка на экземпляр

Псевдопеременная $this используется, как ссылка на вызываемый объект, когда нам нужно вызвать метод из объекта.

PHP ООП. Инстанцирование класса

Инстанцирование класса - создание экземпляра класса.
Это похоже на отрывание листочков бумаги для записи на них информации о человеке, который звонил по телефону. Листочки одинаковые (наш класс), а заполнятся они будут разной информацией (экземплярами класса).

PHP ООП. Определение методов класса

Методы объектно-ориентированного программирования PHP – это обычные функции, которые описываются непосредственно в структуре класса.

PHP ООП. Определение классов

Каждое определение класса начинается с ключевого слова class, затем следует имя класса, и далее пара фигурных скобок, которые заключают в себе определение свойств и методов этого класса.

PHP. Использование ссылок как возвращаемых значений функций

Рассмотрим еще одну возможность пользовательских функций PHP - возврат ссылок.
Возвращение по ссылке используется в тех случаях, когда вы хотите использовать функцию для выбора переменной, с которой должна быть связана данная ссылка.

PHP. Использование ссылок в качестве аргументов функции

Вы можете передавать переменные в пользовательскую функцию по ссылке, если вы хотите разрешить функции модифицировать свои аргументы. В таком случае, пользовательская функция сможет изменять аргументы. Синтаксис таков:

<?php
function foo(&$var)
{
     $var++;
}

$a=5;
foo($a);
// $a здесь равно 6
?>

Заметьте, что в вызове функции отсутствует знак ссылки - он есть только в определении функции. Этого достаточно для корректной передачи аргументов по ссылке.

PHP. Присвоение по ссылке

Ссылка — ярлык, алиас. Ее можно удалить, а значение при этом остается нетронутым.
PHP позволяют создать две переменные указывающие на одно и то же значение.

<?php
$a =& $b;
?>
$a указывает на то же значение что и $b.
$a и $b здесь абсолютно эквивалентны, но это не означает, что $a указывает на $b или наоборот. Это означает, что $a и $b указывают на одно и то же значение. 

PHP. Глобальная и статическая область видимости переменных

Глобальные переменные - это переменные, которые доступны всей программе, включая подпрограммы (пользовательские функции).
Локальная переменная — переменная в функции.
Импорт глобальной переменной в локальную область видимости с помощью global $x.
Статическая переменная существует только в локальной области видимости функции, но не теряет своего значения, когда выполнение программы выходит из этой области видимости. 

вторник, 28 марта 2017 г.

PHP. Серверные переменные и переменные запроса

Переменная $_SERVER - это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов. Записи в этом массиве создаются веб-сервером.
http://php.net/reserved.variables.server

Есть $_REQUEST — Переменные HTTP-запроса. Не используйте ее, т.к она содержит данные из $_GET, $_POST, что является излишним! Когда вам нужны переменные запроса, получайте их из $_SERVER!

PHP. Форматирование дат и времени - Строки и SQL

date — Форматирует вывод системной даты/времени.
string date ( string $format [, int $timestamp = time() ] )
Возвращает строку, отформатированную в соответствии с указанным шаблоном format. Используется метка времени, заданная аргументом timestamp, или текущее системное время, если timestamp не задан. Таким образом, timestamp является необязательным и по умолчанию равен значению, возвращаемому функцией time().
http://php.net/manual/ru/function.date.php

strftime — Форматирует текущую дату/время с учетом текущих настроек локали. РЕКОМЕНДУЕТСЯ, как часть открытого стандарта Unix.
 string strftime ( string $format [, int $timestamp = time() ] )
Форматирует дату/время с учетом текущих настроек локали. Названия месяцев, дней недели и других языко-зависимых строк будут взяты в соответствии с текущими настройками локали, установленной с помощью функции setlocale().
http://php.net/manual/ru/function.strftime.php

PHP. Создание дат и времени - Эпоха Unix

time — Возвращает текущую метку времени Unix.
Возвращает количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970 00:00:00 GMT) до текущего времени.

mktime — Возвращает метку времени Unix для заданной даты.
int mktime ($hr, $min, $sec, $mo, $day, $yr)

strtotime — Преобразует текстовое представление даты на английском языке в метку времени Unix.
int strtotime ( string $time [, int $now = time() ] )

checkdate — Проверяет корректность даты по григорианскому календарю.
bool checkdate ( int $month , int $day , int $year)
Проверяет корректность даты по переданным аргументам. Дата считается корректной, если все параметры принимают допустимые значения.
month -  Месяц. Принимает значения от 1 до 12 включительно.
day -  День. Принимает значения, допустимые для указанного месяца month. При этом учитывается, является ли год year високосным.
year -  Год. Принимает значения от 1 до 32767 включительно.
Возвращает TRUE, если проверяемая дата является корректной, или FALSE в противном случае.

PHP. Использование дополнительных функций для массивов

array_shift — Извлекает первый элемент массива.
array_shift() извлекает первое значение массива array и возвращает его, сокращая размер array на один элемент. Все числовые ключи будут изменены таким образом, что нумерация массива начнётся с нуля, в то время как строковые ключи останутся прежними.

array_unshift — Добавляет один или несколько элементов в начало массива.
array_unshift() добавляет переданные в качестве аргументов элементы в начало массива array. Обратите внимание, что список элементов добавляется целиком, то есть порядок элементов сохраняется. Все числовые ключи будут изменены таким образом, что нумерация массива будет начинаться с нуля, в то время как строковые ключи останутся прежними.

array_pop — Извлекает последний элемент массива.
array_pop() извлекает и возвращает последнее значение параметра array, уменьшая размер array на один элемент.

array_push — Добавляет один или несколько элементов в конец массива.
array_push() использует array как стек, и добавляет переданные значения в конец массива array. Длина array увеличивается на количество переданных значений.

PHP. Использование переменных переменных

Иногда бывает удобно иметь переменными имена переменных. То есть, имя переменной, которое может быть определено и изменено динамически. Обычная переменная определяется примерно таким выражением:
<?php
$a = 'hello';
?>

Переменная переменной берет значение переменной и рассматривает его как имя переменной. В вышеприведенном примере hello может быть использовано как имя переменной при помощи двух знаков доллара. То есть:
<?php
$$a = 'world';
?>

Теперь в дереве символов PHP определены и содержатся две переменные: $a, содержащая "hello", и $hello, содержащая "world". Таким образом, выражение
<?php
echo "$a ${$a}";
?>

выведет то же, что и
<?php
echo "$a $hello";
?>

то есть, они оба выведут: hello world.

Для того чтобы использовать переменные переменных с массивами, вы должны решить проблему двусмысленности. То есть, если вы напишете $$a[1], обработчику необходимо знать, хотите ли вы использовать $a[1] в качестве переменной, либо вам нужна как переменная $$a, а затем ее индекс [1]. Синтаксис для разрешения этой двусмысленности таков: ${$a[1]} для первого случая и ${$a}[1] для второго.

вторник, 14 марта 2017 г.

Добавление местоположений программ в переменную среды PATH

Действия для добавления пути в переменную среды PATH


  1. В меню Пуск щелкните правой кнопкой мыши пункт Компьютер.
  2. В контекстном меню выберите Свойства.
  3. В диалоговом окне Система выберите Дополнительные параметры системы.
  4. На вкладке Дополнительно диалогового окна Свойства системы нажмите кнопку Переменные среды.
  5. В поле Системные переменные диалогового окна Переменные среды прокрутите список до переменной Path, а затем выберите ее.
  6. Нажмите нижнюю из двух кнопок Изменить в этом диалоговом окне.
  7. В диалоговом окне Изменение системной переменной прокрутите строку в поле Значение переменной до конца и добавьте точку с запятой (;).
  8. Добавьте новый путь после точки с запятой.
  9. Нажмите кнопку ОК в трех последовательных диалоговых окнах, а затем закройте диалоговое окно Система.

Materialize-css. Футер

Сделаем футер и прижмем к низу страницы. Документация: https://materializecss.com/footer.html