Запуск приложений
После установки Yii у вас будет работающее приложение Yii. В этом разделе описывается встроенная функциональность приложения, организация кода, а также общий процесс обработки запросов.
Обратите внимание, что в отличие от самого фреймворка, после установки шаблона проекта он полностью принадлежит вам. Вы можете свободно добавлять или удалять код и в целом изменять его в соответствии с вашими потребностями.
Функциональность
Установленное приложение содержит только одну страницу, доступную по адресу http://localhost/. Она использует общий макет, который можно повторно использовать на других страницах.
In addition to the web application, you can access a console script via ./yii or, in case of Docker, make yii. Use this script to run background and maintenance tasks for the application, which the Console Application Section describes.
Структура приложения
Наиболее важные каталоги и файлы приложения (предполагается, что корневым каталогом приложения является app):
assets/ Исходные файлы наборов ресурсов.
config/ Файлы конфигурации.
common/ Общая конфигурация и определения DI.
console/ Конфигурация для консольного приложения.
environments/ Конфигурация для различных окружений (dev/test/prod).
web/ Конфигурация для веб-приложения.
docker/ Файлы, специфичные для Docker.
public/ Файлы, доступные из интернета.
assets/ Опубликованные/скомпилированные ресурсы.
index.php Входной скрипт.
runtime/ Файлы, создаваемые во время выполнения.
src/ Исходный код приложения.
Console/ Консольные команды.
Shared/ Код, общий для веб- и консольного приложений.
Web/ Код, специфичный для веб-приложения (действия, обработчики, макеты).
Shared/ Общие веб-компоненты.
Layout/ Компоненты и шаблоны макетов.
Environment.php Класс конфигурации окружения.
tests/ Набор тестов Codeception для приложения.
Console/ Тесты консольных команд.
Functional/ Функциональные тесты.
Unit/ Модульные тесты.
Web/ Тесты веб-действий.
vendor/ Установленные пакеты Composer.
Makefile Конфигурация для команды make.
yii Точка входа консольного приложения.В целом файлы приложения можно разделить на две группы: находящиеся в app/public и расположенные в других каталогах. К первым можно получить прямой доступ по HTTP (например, через браузер), тогда как вторые не следует делать доступными извне.
Каждое приложение имеет входной скрипт public/index.php — единственный PHP-скрипт приложения, доступный через веб. Входной скрипт с помощью application runner создает экземпляр входящего запроса с использованием одного из пакетов PSR-7 и передает его экземпляру приложения. Приложение последовательно выполняет набор middleware для обработки запроса, после чего передает результат эмиттеру, который отправляет ответ в браузер.
В зависимости от используемых middleware поведение приложения может различаться. По умолчанию маршрутизатор использует запрошенный URL и конфигурацию для выбора обработчика и его выполнения с целью формирования ответа.
Дополнительную информацию о шаблоне приложения можно найти в документации пакета yiisoft/app.
Жизненный цикл запроса
Следующая диаграмма показывает, как приложение обрабатывает запрос.
mermaid
flowchart LR
user[User's client] --> index
index[index.php] --> DI[Initialize Dependency Container]
config[configs] -.-> DI
DI --> RequestFactory[RequestFactory]
RequestFactory -->|Request| app[Application]
app -->|Request| middleware[Middleware]
middleware -->|Request| router[Router]
router -->|Request| action[Action Handler]
action -->|Response| emitter[SapiEmitter]
router -->|Response| emitter
middleware -->|Response| emitter
app -->|Response| emitter
emitter --> user- Пользователь отправляет запрос во входной скрипт
public/index.php. - Входной скрипт с помощью application runner загружает конфигурацию контейнера и создает экземпляр приложения, а также сервисы, необходимые для обработки запроса.
- Фабрика запросов создает объект запроса на основе необработанного запроса, полученного от пользователя.
- Приложение передает объект запроса через настроенный набор middleware. Одним из них, как правило, является маршрутизатор.
- Маршрутизатор определяет, какой обработчик следует выполнить, на основе запроса и конфигурации.
- Обработчик может загрузить данные, например из базы данных.
- Обработчик формирует ответ, используя данные — либо напрямую, либо с помощью пакета представлений.
- Эмиттер получает ответ и отвечает за его отправку в браузер пользователя.