Запуск приложений
После установки Yii у вас будет работающее приложение Yii. В этом разделе описывается встроенная функциональность приложения, организация кода, а также общий процесс обработки запросов.
Обратите внимание, что в отличие от самого фреймворка, после установки шаблона проекта он полностью принадлежит вам. Вы можете свободно добавлять или удалять код и в целом изменять его в соответствии с вашими потребностями.
Функциональность
Установленное приложение содержит только одну страницу, доступную по адресу http://localhost/. Она использует общий макет, который можно повторно использовать на других страницах.
Помимо веб-приложения, вы можете получить доступ к консольному скрипту с помощью APP_ENV=dev ./yii или, в случае использования Docker, make yii. Этот скрипт используется для запуска фоновых и обслуживающих задач приложения, что описано в разделе Консольное приложение.
Структура приложения
Наиболее важные каталоги и файлы приложения (предполагается, что корневым каталогом приложения является 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. Одним из них, как правило, является маршрутизатор.
- Маршрутизатор определяет, какой обработчик следует выполнить, на основе запроса и конфигурации.
- Обработчик может загрузить данные, например из базы данных.
- Обработчик формирует ответ, используя данные — либо напрямую, либо с помощью пакета представлений.
- Эмиттер получает ответ и отвечает за его отправку в браузер пользователя.