Установка
Установка Composer
Установка проекта через composer
И далее нужно будет для композера указать сгенерированный токен
Структура
В качестве входного скрипта выступает фронт-контроллер, который находится в web/index.php
, в котором подгружается конфигурация, фреймворк Yii и собирается объект приложения
Далее запрос попадает в приложение, где определяется маршрут и создаётся контроллер, по которому пойдёт запрос
Внутри контроллера запрос проходит проверки на валидность, выполняется загрузка данных из базы (данные определяются их моделью) и далее эти данные преобразуются в тот ответ, который ожидает увидеть пользователь - вид (например, нам нужно получить от полей с созданным пользователем ещё и обогащённые данные в нужном формате - отправили все данные по пользователю в разнобой, но получили полный ответ, где идут его комментарии, место работы и так далее)
- web - это публичная папка, которая представляет доступ к страницам, стилям, изображениям. Её не стоит закрывать от пользователей.
- widgets - это папка с переиспользуемым кодом внутри приложения
- assets - папка с пакетами ресурсов для приложения
- commands - команды для работы из консоли с приложением
- config - папка с конфигами, в которой можно настроить подключение к базе или работу с web
- controllers - папка с контроллерами приложения
- mail - папка с шаблонами писем для отправки пользователям
- models - папка с моделями данных
- runtime - папка с логами и кешем
- test - папка с тестами приложения
- vendor - папка с зависимостями
- views - папка с шаблонами и видами (layout хранит шаблоны, site хранит виды)
Контроллеры
Общее
Контроллеры в Yii2 представляют собой классы, которые обрабатывают входящие запросы от пользователя и выполняют определенные действия. Они служат посредниками между моделями данных и представлениями, управляя потоком данных и логикой приложения.
Вот основные аспекты работы контроллеров в Yii2:
- Маршрутизация: Контроллеры связаны с конкретными маршрутами (URL-адресами). Веб-приложение Yii2 использует маршрутизацию для определения, какой контроллер должен быть вызван для обработки запроса.
- Действия (Actions): Контроллеры содержат публичные методы, называемые действиями (actions), которые соответствуют конкретным операциям, выполняемым пользователем. Например, действие
actionIndex()
может отображать главную страницу, аactionCreate()
может создавать новую запись в базе данных. - Входные данные: Контроллеры могут получать данные от пользователя через параметры URL, GET или POST запросы, а также через формы или JSON данные. Эти данные передаются в действия контроллера в качестве аргументов метода.
- Обработка запросов: Контроллеры обрабатывают входящие запросы, выполняют необходимую логику и взаимодействуют с моделями данных для получения или изменения данных. Они могут использовать различные методы доступа к данным, такие как ActiveRecord или QueryBuilder.
- Результаты: После обработки запроса контроллер должен вернуть результат пользователю. Это может быть представление (View), которое отображается пользователю, или данные в формате JSON или XML, отправляемые клиенту.
- Фильтры и события: Yii2 предоставляет возможность применять фильтры для контроля доступа, кэширования, логирования и других аспектов обработки запросов. Контроллеры могут использовать события для выполнения дополнительных операций до или после обработки запросов.
В этом примере SiteController
содержит два действия: actionIndex()
и actionCreate()
. actionIndex()
отображает представление “index” с передачей переменной $message
, а actionCreate()
обрабатывает POST-запрос и перенаправляет пользователя на главную страницу.
Создание контроллера
В папке с контроллерами нам нужно создавать одноимённые контроллеры, которые будут обозначать определённый маршрут. В них мы вкладываем функции, которые начинаются с action
и уже дальше будет идти имя роута, который мы вызываем в url-строке
controllers / PostCommentController.php
Так же мы можем отделять контроллеры в отдельные модули. Тут нам нужно будет указать папку дополнительно в неймспейсе \admin
controllers / admin / MyController.php
Так же мы можем не указывать имя метода контроллера, если он Index
или если мы запишем в качестве дефолтного контроллера другой через $defaultAction
controllers / TestController.php
Таким образом мы можем просто передавать параметры в контроллер через Get-запрос
controllers / TestController.php
Вызов экшенов
Так же внутри контролерров в методе actions()
мы можем присваивать определённым роутам контроллеров выполнение определённых функций. Тут в контроллере test
по роуту test
будет выводиться текст 'Action runner'
components / HelloAction.php
controllers / TestController.php
Представления (Виды - View)
Общее
Представления (Views) в Yii2 отвечают за отображение данных пользователю. Они содержат HTML-код, который определяет структуру и внешний вид пользовательского интерфейса. Представления могут быть использованы для отображения результатов действий контроллеров или для отображения статических страниц.
Вот основные аспекты работы с представлениями в Yii2:
- Шаблоны представлений: Yii2 поддерживает использование шаблонов представлений для обеспечения единообразия внешнего вида приложения. Шаблоны позволяют определить общую структуру страницы с различными блоками, которые могут быть заполнены данными из действий контроллеров.
- Виджеты: Виджеты являются многоразовыми компонентами, которые упрощают создание повторяющихся элементов пользовательского интерфейса. Yii2 предоставляет множество готовых виджетов, таких как кнопки, формы, навигационные меню и т. д. Можно также создавать собственные виджеты для повторного использования.
- Передача данных: Контроллеры передают данные в представления через массив параметров. Эти данные могут быть доступны в представлении для отображения или использования в логике шаблона.
- Использование логики: В представлениях можно использовать PHP-код для выполнения простых операций или циклов. Однако для сложной бизнес-логики рекомендуется ограничивать использование PHP-кода и переносить его в контроллеры или компоненты.
- Отображение данных: Представления используются для отображения данных, полученных из контроллеров или других источников. Можно использовать различные теги и функции Yii2 для форматирования и отображения данных, таких как
<?= $variable ?>
для вывода переменной или<?php foreach ($items as $item): ?>
для отображения элементов массива. - Многоязычность: Yii2 имеет встроенную поддержку многоязычности, позволяющую создавать представления на разных языках. Можно использовать специальные функции для перевода текстовых строк на нужный язык.
В этом примере представление использует шаблон main
, устанавливает заголовок страницы и подключает стили и скрипты. Затем оно отображает заголовок и параграф, а также перебирает элементы массива $items
и выводит их в виде блоков <div>
. Функция Html::encode()
используется для безопасного отображения данных, чтобы избежать возможности XSS-атак.
Использование View
Yii предоставляет нам возможность рендерить страницы пользователю на основе определённых видов.
Конкретно у нас есть 4 методя для реализации данной задумки:
- render - отрисовывает заранее заданный вид
- renderAjax - отрисовывает страницу по AJAX запросу и подключает JS/CSS к файлу
- renderPartial
- renderFile - отрисовывает файл
Если нам нужно отрендерить элемент, то мы должны в подцеплённый к виду контроллер вписать метод, который будет соответствовать имени вида, который он рендерит
И тут нам нужно сразу поговорить про то, что все виды мы вставляем в шаблоны, которые принимают в себя виды. Вверху вид хедера, снизу - футер, а в центре - изменяемая контентная часть
И таким образом мы в тестовом контроллере сделали actionIndex()
, который будет по роуту \test
вызывать
controllers / TestController.php
views / test / index.php
Рендер View во View
Так же мы можем рендерить одни вью в других вью
views / test / inc.php
views / test / index.php
Передача параметров внутрь View из контроллеров
Таким образом мы можем передавать данные во вью:
первый вариант:
controllers / TestController.php
Второй вариант:
views / test / index.php
Отличия при использовании слешей при обращении к виду:
И по вышеописанному алгоритму мы можем подключить любой другой файл с использованием наших заветных //
views / test / index.php
views / data / about.html
Так же у нас есть возможность передавать данные из контроллера во вью в обход прямой передачи
controllers / TestController.php
views / test / index.php
Ресурсы
В Yii2 ресурсы представляют собой файлы CSS, JavaScript, изображений и других статических файлов, используемых в приложении. Работа с ресурсами упрощает организацию и управление внешним видом и функциональностью вашего приложения.
Yii2 предоставляет специальный механизм для работы с ресурсами, который называется ассеты (Assets). Ассеты позволяют объединять и минимизировать файлы, кэшировать их, а также автоматически подключать зависимости.
Вот основные шаги для работы с ассетами в Yii2:
- Создание класса ассета: Создайте класс ассета, который будет представлять группу связанных файлов. Класс ассета должен наследоваться от
yii\web\AssetBundle
и определять свойствоbasePath
, указывающее на папку с файлами ассета.
- Подключение ассета: В контроллерах или представлениях можно подключить ассет следующим образом:
- Использование ресурсов: После подключения ассета его файлы становятся доступными для использования. Например, вы можете использовать функцию
registerCssFile()
илиregisterJsFile()
для явного подключения дополнительных файлов CSS или JavaScript.
Работа с форамами
- Создание модели данных:
- Создание представления (view):
- Обработка отправки формы в контроллере:
Отображение сообщений об успехе в представлении ‘success’: