php yii2 для начинающих
Основы Yii Framework для чайников
Yii Framework представляет собой один из лучших PHP-фреймворков, предназначенных для разработки больших веб-приложений. В цикле «Yii Framework для чайников» мы научимся разворачивать yii-приложение на сервере, узнаем как работать с фреймворком и познакомимся с основными возможностями, которые он предоставляет. Все это я постараюсь рассказать максимально просто и наглядно.
Развертка Yii-приложения
Для того, чтобы использовать Yii Framework необходимы:
При этом в папке сайта будет развернуто демонстрационное yii-приложение и выставлены требуемые права на папки и файлы.
Структура Yii-приложения
Рассмотрим папки, находящиеся в каталоге /srv/www/site.com/
Настройка Yii-приложения
Любые взаимодействия с пользователем в yii-приложении происходят через bootstrap-файл index.php
Большинство настроек находятся в файле /config/main.php. Файл конфигурации возвращает многомерный ассоциативный массив настроек, некоторые из которых по умолчанию предопределены.
Создание БД для будущего приложения
В качестве примера мы будем работать с базой данных, содержащей некоторое подобие хабра-комментариев и хабра-пользователей. Наглядно ее можно представить следующим образом:
SQL-запросы для создания соответствующих таблиц:
Программирование с YII2: приступаем к работе
Установка YII2
Документация
Вы можете найти подробную инструкцию здесь, я же пробегусь по простой и типичной для Mac OS X установке и настройки среды. У фреймоврка есть подробная документация и описание классов, которое содержит все детали о YII.
От переводчика. Я в свою очередь не имею под рукой яблочного девайса и буду проделывать все действия под Ubuntu (запущенной под VMWare Player).
Установка Composer
Для комфортного использования фреймворка рекомендуется использовать популярный менеджер расширений PHP – Composer. Если он у вас еще не установлен проделайте следующее:
Установка YII2
Теперь используем Composer для установки YII2. Для установки требуется аккаунт на GitHub, если у вас его нет – зарегистрируйтесь.
Давайте назовем наш первый проект «hello»:
YII2 поддерживает два типа приложений для разработки: простые и продвинутые. Для данного урока мы будем использовать простое приложение, оно устанавливается по умолчанию. Шаблон продвинутого приложения поддерживает front-end, back-end и консоль, так же как WordPress, это административная панель и задачи для cron.
Установка и настройка локальной среды разработки
Я использую бесплатное ПО MAMP for OS X с открытым исходным кодом, для разработки. Убедитесь, что MAMP запущен и его web сервер и сервер базы данных запущены. Затем создайте символьную ссылку на директорию с сайтом:
Теперь, если вы настроили все верно, то открыв localhost:8888/hello/web вы увидите простой шаблон приложения YII2 с Bootstrap 3.x.
Эта страница удивит разработчиков, ранее разрабатывающих на YII 1.1, где не был предустановлен Bootstrap последней версии, который прочно занял свое место в сети.
YII архитектура приложения
Одна из ключевых особенностей фреймворка – поддержка паттерна MVC. Это позволяет создавать более структурированный код, который проще понимать, упрощает многие вещи, которые реализуются с трудом на PHP, такие как безопасность и автоматическая кодогенерация. Также это способствует поддержке и повторному использованию кода.
В приложении YII весь трафик направляется на один файл /web/index.php. Этот файл загружает YII, зависимости, а затем запускает наше приложение.
По умолчанию это Index метод в файле /controllers/SiteController.php
Как правило, в контроллерах много методов, но с минимальным количеством кода. Контроллеры управляют доступом, загружают модели и представления. Основная смысловая нагрузка должна лежать на моделях, а представления лишь отображают шаблоны.
По умолчанию YII отображает /views/layouts/main.php в качестве представления для /views/site/index.php. main.php поддерживает html и css структуру страницы с тулбаром и контентом. Внутри main.php происходит вызов содержимого:
Пишем приложение «Привет мир!»
Включаем красивые URL-адреса
В начале давайте включим красивые адреса при помощи mod_rewrite. Если на домашней странице вы кликнете по кнопке about то увидите адрес подобный этому: localhost:8888/hello/web/index.php?r=site%2Fabout. Мы же сейчас его приведем к такому виду localhost:8888/hello/web/site/about.
В директории config хранятся настройки всей вашей среды: настройки веб приложения, консольного приложения и настройки баз данных. Изменим файл /config/web.php следующим образом:
Убедитесь, что в MAMP включен mod_rewrite, если же возникли проблемы посмотрите ветку на stackoverflow.
В вашем браузере перейдите по адресу localhost:8888/hello/web/site/about, теперь там вы должны увидеть страницу About простого приложения YII.
Создаем экшн
Следующим шагом создадим действие для контроллера, назвав Say, для повтора нашего сообщения. В файле /controllers/SiteController.php добавим следующее:
Эта функция будет искать параметр target в адресе url для его вывода на экран. В случае его отсутствия выведется просто «World». В фреймворке YII экшены реализованы как методы с префиксом actionИмяЭкшена. В класссе SiteController мы использовали public function actionSay для создания экшена Say.
Стандартным поведением метода render является поиск файла в views/ControllerID/ViewName.php поэтому давайте создадим в /views/site/ файл say.php:
Настройка вашей удаленной среды
Простое приложение YII должно запускаться на серверах Apache и Nginx «из коробки», я буду приводить инструкции по запуску на Apache, про Nginx вы сможете найти здесь.
Создаем репозиторий на GitHub
/Sites/hello/.gitignore, чем затем удалять в ручную лишнее. Хотя оба варианта допустимы.
Я использую приложение GitHub Mac OS X(https://mac.github.com/), хотя вы также можете воспользоваться командной строкой для инициализации репозитория. Например так(замените «youraccount» вашим именем на GitHub:
От переводчика. Я в качестве репозитория предпочитаю использовать Bitbucket, так как он позволяет иметь приватные репозитории бесплатно.
Конфигурируем Apache на сервере
Если у вас до сих пор не сконфигурирован сервер, рекомендую посмотреть на инструкцию по конфигурации сервера на Ubuntu (http://jeffreifman.com/digitalocean). Если у вас есть IP адрес, сконфигурируйте DNS вашего сервера:
Теперь войдите удаленно по ssh на ваш сервер при помощи IP или доменного имени
Обновите кофигурацию, установите Git, включите mod_rewrite для Apache и mcrypt для PHP.
Настройка доступа удаленного сервера к GitHub
Теперь мы настроим pull запросы с GitHub. Вначале установите Git
Теперь мы создадим группу для www, добавим данные и GitHub пользователей и настроим их права:
Теперь создадим ключ для синхронизации с репозиторием:
Вы увидите нечто похожее на это, вам необходимо скопировать и вставить этот ключ на GitHub
(если возникле проблемы посмотрите здесь (https://help.github.com/articles/error-permission-denied-publickey/)):
Зайдите в раздел настроек репозитория и добавьте этот ключ:
Затем вы увидите что-то подобное:
Наконец-то вы сможете склонировать ветку на ваш сервер:
Если все правильно сконфигурированно то вы увидите:
По мере увеличения количества кода вы через репозиторий сможете легко синхронизировать код локальной машины и продакшн-сервера. Это гораздо проще чем синхронизировать архивом или вручную, вы убедитесь в этом сами в процессе дальнейшего обучения.
Создание конфигурации сайта для Apache
Создадим конфигурационный файл:
Измените доменное имя на ваше:
Убедитесь в том что ваше приложение работает пройдя по ссылке yourdomain.com/site/say?target=World! (Отладочный тулбар фреймворка внизу страницы будет отключен!)
Поздравляю! Теперь мы готовы приступить к изучению более сложных особенностей фреймворка!
Программирование с YII2: приступаем к работе
Установка YII2
Документация
Вы можете найти подробную инструкцию здесь, я же пробегусь по простой и типичной для Mac OS X установке и настройки среды. У фреймоврка есть подробная документация и описание классов, которое содержит все детали о YII.
От переводчика. Я в свою очередь не имею под рукой яблочного девайса и буду проделывать все действия под Ubuntu (запущенной под VMWare Player).
Установка Composer
Для комфортного использования фреймворка рекомендуется использовать популярный менеджер расширений PHP – Composer. Если он у вас еще не установлен проделайте следующее:
Установка YII2
Теперь используем Composer для установки YII2. Для установки требуется аккаунт на GitHub, если у вас его нет – зарегистрируйтесь.
Давайте назовем наш первый проект «hello»:
YII2 поддерживает два типа приложений для разработки: простые и продвинутые. Для данного урока мы будем использовать простое приложение, оно устанавливается по умолчанию. Шаблон продвинутого приложения поддерживает front-end, back-end и консоль, так же как WordPress, это административная панель и задачи для cron.
Установка и настройка локальной среды разработки
Я использую бесплатное ПО MAMP for OS X с открытым исходным кодом, для разработки. Убедитесь, что MAMP запущен и его web сервер и сервер базы данных запущены. Затем создайте символьную ссылку на директорию с сайтом:
Теперь, если вы настроили все верно, то открыв localhost:8888/hello/web вы увидите простой шаблон приложения YII2 с Bootstrap 3.x.
Эта страница удивит разработчиков, ранее разрабатывающих на YII 1.1, где не был предустановлен Bootstrap последней версии, который прочно занял свое место в сети.
YII архитектура приложения
Одна из ключевых особенностей фреймворка – поддержка паттерна MVC. Это позволяет создавать более структурированный код, который проще понимать, упрощает многие вещи, которые реализуются с трудом на PHP, такие как безопасность и автоматическая кодогенерация. Также это способствует поддержке и повторному использованию кода.
В приложении YII весь трафик направляется на один файл /web/index.php. Этот файл загружает YII, зависимости, а затем запускает наше приложение.
По умолчанию это Index метод в файле /controllers/SiteController.php
Как правило, в контроллерах много методов, но с минимальным количеством кода. Контроллеры управляют доступом, загружают модели и представления. Основная смысловая нагрузка должна лежать на моделях, а представления лишь отображают шаблоны.
По умолчанию YII отображает /views/layouts/main.php в качестве представления для /views/site/index.php. main.php поддерживает html и css структуру страницы с тулбаром и контентом. Внутри main.php происходит вызов содержимого:
Пишем приложение «Привет мир!»
Включаем красивые URL-адреса
В начале давайте включим красивые адреса при помощи mod_rewrite. Если на домашней странице вы кликнете по кнопке about то увидите адрес подобный этому: localhost:8888/hello/web/index.php?r=site%2Fabout. Мы же сейчас его приведем к такому виду localhost:8888/hello/web/site/about.
В директории config хранятся настройки всей вашей среды: настройки веб приложения, консольного приложения и настройки баз данных. Изменим файл /config/web.php следующим образом:
Убедитесь, что в MAMP включен mod_rewrite, если же возникли проблемы посмотрите ветку на stackoverflow.
В вашем браузере перейдите по адресу localhost:8888/hello/web/site/about, теперь там вы должны увидеть страницу About простого приложения YII.
Создаем экшн
Следующим шагом создадим действие для контроллера, назвав Say, для повтора нашего сообщения. В файле /controllers/SiteController.php добавим следующее:
Эта функция будет искать параметр target в адресе url для его вывода на экран. В случае его отсутствия выведется просто «World». В фреймворке YII экшены реализованы как методы с префиксом actionИмяЭкшена. В класссе SiteController мы использовали public function actionSay для создания экшена Say.
Стандартным поведением метода render является поиск файла в views/ControllerID/ViewName.php поэтому давайте создадим в /views/site/ файл say.php:
Настройка вашей удаленной среды
Простое приложение YII должно запускаться на серверах Apache и Nginx «из коробки», я буду приводить инструкции по запуску на Apache, про Nginx вы сможете найти здесь.
Создаем репозиторий на GitHub
/Sites/hello/.gitignore, чем затем удалять в ручную лишнее. Хотя оба варианта допустимы.
Я использую приложение GitHub Mac OS X(https://mac.github.com/), хотя вы также можете воспользоваться командной строкой для инициализации репозитория. Например так(замените «youraccount» вашим именем на GitHub:
От переводчика. Я в качестве репозитория предпочитаю использовать Bitbucket, так как он позволяет иметь приватные репозитории бесплатно.
Конфигурируем Apache на сервере
Если у вас до сих пор не сконфигурирован сервер, рекомендую посмотреть на инструкцию по конфигурации сервера на Ubuntu (http://jeffreifman.com/digitalocean). Если у вас есть IP адрес, сконфигурируйте DNS вашего сервера:
Теперь войдите удаленно по ssh на ваш сервер при помощи IP или доменного имени
Обновите кофигурацию, установите Git, включите mod_rewrite для Apache и mcrypt для PHP.
Настройка доступа удаленного сервера к GitHub
Теперь мы настроим pull запросы с GitHub. Вначале установите Git
Теперь мы создадим группу для www, добавим данные и GitHub пользователей и настроим их права:
Теперь создадим ключ для синхронизации с репозиторием:
Вы увидите нечто похожее на это, вам необходимо скопировать и вставить этот ключ на GitHub
(если возникле проблемы посмотрите здесь (https://help.github.com/articles/error-permission-denied-publickey/)):
Зайдите в раздел настроек репозитория и добавьте этот ключ:
Затем вы увидите что-то подобное:
Наконец-то вы сможете склонировать ветку на ваш сервер:
Если все правильно сконфигурированно то вы увидите:
По мере увеличения количества кода вы через репозиторий сможете легко синхронизировать код локальной машины и продакшн-сервера. Это гораздо проще чем синхронизировать архивом или вручную, вы убедитесь в этом сами в процессе дальнейшего обучения.
Создание конфигурации сайта для Apache
Создадим конфигурационный файл:
Измените доменное имя на ваше:
Убедитесь в том что ваше приложение работает пройдя по ссылке yourdomain.com/site/say?target=World! (Отладочный тулбар фреймворка внизу страницы будет отключен!)
Поздравляю! Теперь мы готовы приступить к изучению более сложных особенностей фреймворка!
Введение в YII 2
Как обычно в последнее время, оставлю здесь доклад своего товарища о YII 2. Вторая версия фреймворка YII 2 набирает обороты и становится все более и более популярнее и чуть ниже я напишу, что нам нужно для того, чтобы начать делать проекты с этой системой.
Итак, чтобы начать делать сайты на YII 2, нам понадобятся: Веб-сервер, PHP версии 5.4 или выше, Git, Composer, знание ООП и уровень интеллекта выше 103. Надо сказать, это будет не так уж и сложно, но и не просто. Эта статья поможет стартануть проект на YII 2 самому дну веб-разработки: «школьникам» и старперам — адептам CodeIgniter. Другие статьи в Интернете либо еще не созданы (стабильной версии YII 2 еще нет), либо написаны для тех, кто уже создал тысячу YII 1 и сотню YII 2 сайтов. Я не такой и статью я буду писать не такую, а простую и понятную, ведь эта статья — мой конспект, который я вел во время изучения фреймворка YII 2.
Шаг 1. Введение.
Короткие определения и пояснения перед тем, как идти дальше:
1) Composer. Эта программа обработает составленный нами composer.json, создаст папку vendor и закачает туда через Git последнюю версию YII 2 и все другие «пакеты», от которых зависит фреймворк. Подробнее. Сразу предупрежу, в Windows можно столкнуться с кучей проблем при установке.
2) PSR-4. Разработчики постоянно холиварят, сколько пробелов должен быть таб, как называть переменные и т.д. Сейчас тренд такой, что таб — это 4 пробела, а в качестве стандарта хранения и загрузки классов используется PSR-4. Именно в стандарте PSR-4 Composer компонует скачанные файлы:
После обработки composer.json, YII2 лежит в
Туда попадает содержимое папки framework из Гитхаба YII2.
Вообще, кто не в теме, советую почитать про PSR. Если вы плохой парень, можно называть свой_методы_вот_так, но будьте готовы, что вскоре все это неприятно запахнет, вам таки придется подчиниться YII и родить метод getYourMethod — ад перфекциониста.
3) Namespace. Пространства имен были введены в PHP 5.3. Для понимания всей кухни, откройте vendor/yiisoft/yii2/classes.php. Здесь перечислены классы, подгружаемые YII2. Главный класс для веб-приложений находится в web/application.php. Как видим, его namespace — yii\web. Что это значит? Да пока ничего, просто данный класс можно вызвать вот так:
$application = new \yii\web\Application;
А если потом в системе появится другой class Application, его мы вызовем через его уникальный неймспейс, вот так:
$application2 = new \vasya\megasoft\Application;
До PHP 5.3 в одном приложении нельзя было использовать два класса с одинаковым названием.
Все классы classes.php разделены по неймспейсам \yii\**\**, это создает абстрактную структуру фреймворка. Наше приложение мы точно также раскидаем по собственным неймспейсам и YII сможет по ним ориентироваться в нашей структуре.
4) MVC. Ничего лучше схемы MVC (модель-вид-контроллер) пока не было изобретено, почти все популярные фреймворки работают по этой схеме. Это значит, что любой запрос пользователя проходит через (обязательно) Контроллер и (возможно) Модель и (возможно) Вью. Это очень удобно, практично и красиво, следование этой цепочке позволит проекту держаться в собранном состоянии — ничего ни от куда не будет торчать (с ужасом вспомните ваш первый проект не на MVC).
Вот три класса YII2, расширяющие пользовательские классы контроллера и модели, а также файлы шаблона:
5) CRUD. Create, Read, Update, Delete. Почти все веб-приложения построены на этих четырех буквах. Мы создаем, читаем, обновляем, удаляем данные в базе данных.
Шаг 2. Установка.
В корне проекта создадим composer.json с заполненной секцией require:
Когда выйдет стабильная версия YII2, в первой строчке (minimum-stability) необходимость отпадет. Теперь передадим этот файл в Composer. В Linux надо в папке с проектом выполнить composer install. В Windows советую при установке выбрать галочку «внедриться в проводник» и устанавливать пакеты через правую кнопку мыши (ПКМ по папке с composer.json).
Если все ОК, создастся папка vendor, в которую будет помещен YII2 и все нужные пакеты. В папке также будет лежать autoload.php, который загрузит все нужные классы.
В дальнейшем нам понадобятся еще некоторые пакеты — например, дебаговая панель и генератор кода. Сразу добавим все перечисленное в require:
И выполним обновление: composer update.
После обучения мы будем клепать сайты на основе уже готовых каркасов. См. тут, как установить базовый или расширенный каркас YII2 сайта через Composer, вместе с самим YII.
Шаг 3. Конфигурация.
Следующий шаг после установки — конфигурация. Наше будущее приложение будет максимально походить на CodeIgniter по структуре. Но вообще, в YII2 можно (но лучше не надо) мутить с папками и неймспейсами что угодно.
Создаем папку application и в ней стандартный набор других папок: config, controllers, models, views, components, runtime (сюда YII будет записывать системные логи).
index.php выглядит так, он просто получает конфиг и передает его в \yii\web\Application:
Вот на данном этапе важно понимать, что мы вообще делаем. yii\web\Application — это обычный класс, как и все остальное в YII. Каждый класс хорошо документирован. Например, вот документация на этот, в ней описано каждое свойство и метод. После конфигурации свойства будут заполнены нужными нам данными.
Минимальный application/config/config.php для приложения, работающего с базой:
Данный конфиг загрузит один компонент — класс работы с БД. И, если в index.php продефайнена константа разработки, пару модулей для всеми уважаемого разработчика.
Теперь проверим, все ли работает. Создаем в корне проекта папку assets с «хоршими» правами, вызываем модуль генератора кода site.loc/?r=gii. Попутно ценим дебаговую панель снизу. Сказка.
Шаг 4. Контроллер.
Контроллер — класс, содержаший экшены, обрабатывающие запросы пользователя. Каждый экшен — это некая кнопка на общей панели. Нажимаем на кнопку — получаем результат.
Контроллер по умолчанию в YII2 — SiteController, он должен лежать в неймспейсе app\controllers (неймспейс можно изменить, задав в конфиге ключ controllerNamespace). Экшен по умолчанию — Index. Создаем application/controllers/SiteController.php. Помните про PSR? Так вот, классы рекомендуется называть с большой буквы, как и файлы, содержащие класс. А методы — с маленькой буквы.
Все, дальше мы можем подгрузить нашу модель в контроллере (use app\models), создать сколько угодно экземпляров с разными именами и учредителями, как угодно крутить-вертеть этими ООО в контроллере и вьюхах.
Тут надо помнить, что ООО — это не только информация, но и различные действия. Например, слияния. Мы можем создать в модели метод merge, который будет делать нужные манипуляции, и передавать туда объект для слияния.
С помощью моделей можно описать всю жизнь. Чем нам в этом поможет YII2? Прежде всего — класс \yii\db\ActiveRecord (советую внимательно изучить), там куча всего, что поможет связать нашу модель данных с таблицами MySQL. Наследуем его и используем.
Кстати, важно понимать, что ActiveRecord тянет за собой наследование yii\base\Model, изучив этот класс, вы поймете, что является моделью в YII. Это правила валидации отправленных пользователем данных, это «атрибуты», это «поведения», это магические сеттеры и геттеры, которые взаимодействуют с созданным вами классом модели.
В базе данных будет три таблицы:
CREATE TABLE IF NOT EXISTS `founders` (`id` int(11) NOT NULL, `name` varchar(255) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; INSERT INTO `founders` (`id`, `name`) VALUES(1, ‘Vasya’),(2, ‘Petya’); CREATE TABLE IF NOT EXISTS `founders_to_ooo` (`founder_id` int(11) NOT NULL,`ooo_id` int(11) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `founders` ADD PRIMARY KEY (`id`); INSERT INTO `founders_to_ooo` (`founder_id`, `ooo_id`) VALUES(1, 1),(2, 1); CREATE TABLE IF NOT EXISTS `ooo` (`id` int(11) NOT NULL,`name` varchar(255) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2; ALTER TABLE `ooo` ADD PRIMARY KEY (`id`); INSERT INTO `ooo` (`id`, `name`) VALUES(1, ‘Test1’);
Основная — ooo. В founders будут храниться учредители. founders_to_ooo — связующая таблица, привязывающая сколько угодно учредителей к одной записи в таблице ooo.
Для учредителей мы создаем отдельную модель Founder.
‘Идентификатор’, ‘name’ => ‘Имя’ ]; > >
Далее, в контроллере добавляем use app\models\OOO; и выводим инфу о ООО с >
А вот так можно (нужно) использовать метод yii\base\model\load() в комбинации с yii\db\ActiveRecord\save() для загрузки данных в модель и сохранения данных в БД:
YII в load проверит всю валидацию, описанную в rules модели, и только если данные корректны, выполнит save(), если данные некорректны — во вьюхе будет выведена нужная ошибка рядом с полем. Разумеется, если мы вставляем данные в базу через АПИ YII, мы обезопасим себя от любого рода инъекций.
Шаг 6. Вью.
Это шаблон сайта. Контроллер возвращает результат рендеринга шаблона с переданными переменными
и этот результат выводится в браузер. В YII2 шаблон делится на два типа: слой и вью. Слои хранятся в views/layouts, вью — в views/<НазваниеКонтроллера>. Создаем папки /application/views/layouts/ и /application/views/site/
Создаем слой main.php (это слой по умолчанию). Примерно так выглядит слой YII2.
Хелпер html будет использован почти во всех вьюхах, изучите документацию по нему.
ОООшки
$model передается вью через экшен контроллера.
Шаг 6. Виджеты.
Основная цель фреймворка — ускорить процесс создания проекта. Чем меньше кода, тем лучше. А лучше короткого кода может быть только уже существующий код. Виджет — уже существующий код. Пример такого виджета — GridView, который выведет таблицу данных с возможностью сортировать по каждой колонке.
Видоизменяем нашу вью:
Создаем модель OOOSearch
Вот теперь получаем результат — табличку с пагинацией и возможностью фильтровать и сортировать содержимое. Побочный эффект от копирования и подгонки под себя готового кода — это довольно-таки нудное занятие. Благо, есть генератор кода CRUD (/?r=gii), с помощью него мы можем (но не всегда) сгенерировать и поисковую модель, и вьюху с этим виджетом.
Отдельно стоит оставиться на виджете yii\widgets\ActiveForm. С помощью него создаются все формы на сайте. Данный виджет умеет выводить основные элементы формы и возьмет на себя функцию валидации данных перед отправкой на сервер. В целом — он крайне прост. Выводим форму и один инпут, передаем инпуту модель с rules, чтобы виджет знал, что должно быть введено в каждое поле:
Повторюсь, в идеале всю эту гадость мы не будем писать, надо только освоить генератор кода, и вьюха будет сгенерирована на основе указанной таблицы.
Шаг 8. Поведения и события.
Тут я процитирую предложение этой статьи.
В Yii существует такая вещь как поведения (behaviors).
Добавлю лишь, что поведения привязываются к событиям (ивентам). А саму статью читать пока незачем, она понятна только тем, кто уже написал тысячи поведений YII в своей жизни.
Поведение — это написанный нами код, который выполняется в какой-то момент и изменяет\дополняет поведение приложения. Это аналог хуков в WordPress. Мы можем установить готовый WP плагин, который через хуки изменит функционал WP блога. Каждое поведение цепляется за «ивент» (событие) в каком-то классе YII2. Давайте зацепимся за класс контроллера yii\web\Controller, который наследуют все пользовательские контроллеры. Открываем документацию, перематываем до раздела Events. Ивента у данного объекта всего два, с говорящими названиями: EVENT_AFTER_ACTION и EVENT_BEFORE_ACTION. Зацепимся за первый — *ПОСЛЕ_ВЫПОЛНЕНИЯ_ЛЮБОГО_ЭКШЕНА* будем записывать в лог ИП адрес, время обращения, название класса и прочую инфу.
Как и все остальное в YII2, поведение является классом. Создаем класс application\components\Log.php в неймспейсе app\components
Теперь в любом контроллере добавляем наше поведение через объявление метода behaivors:
public function behaviors() < return [ 'notification' =>[ ‘class’ => ‘app\components\Log’, ‘custom_info’ => ‘Test’ ], ]; >
И еще про Ивенты. На любой ивент можно подписаться так:
Шаг 9. Модули.
Как говорится, в хорошем ООП коде нет проблем, которые нельзя было бы решить вводом нового уровня абстракции. Кроме одной — слишком большой уровень абстракции. Модуль — дополнительный уровень абстракции в приложении. Модуль — это пачка. Пачка MVC, содержащая свои контроллеры, модели и вьюхи, отгороженные от других контроллеров, моделей и вьюх. Какой-то программист когда-то захотел добавить новый раздел на сайт, посмотрел на помойку уже созданных контроллеров и пообещал, что создаст свои контроллеры с блекджеком и шлюхами. Ну и добавил поддержку модулей в YII.
Модули приложения перечисляются в конфигурации:
‘bootstrap’ => [‘ooo’], ‘modules’ => [ ‘ooo’ => [ ‘class’ => ‘application/modules/OOO’ ], //. ],
Именно «модуль» представляет из себя генератор кода gii, который мы подключили изначально. Чтобы понять, что к чему, открываем vendor/yiisoft/yii2, видим класс модуля Module.php, папку controllers и views. Можно догадаться, что по тому же принципу мы смогли бы создать свой модуль OOO и использовать его на любом сайте через вызов /?r=ooo
Читаем эту статью. Там все приложение построено на модулях. Оно сложное, я сам сейчас копаюсь там.
Шаг 10. Послесловие.
Тут лишь хочу описать свои ошущения от YII2 во время первого знакомства. До этого я пилил сайты на CodeIgniter и сделал свои тулзы для генерации кода, для автоматической валидации форм и т.д. Сейчас я вижу все это в YII2, но тут это реализовано действительно круто и универсально. Вот и все ощущения. Буду дальше изучать YII, осталось еще куча всего интересного.