-
Notifications
You must be signed in to change notification settings - Fork 63
Жизненный цикл
Butschster edited this page May 10, 2015
·
1 revision
- Из конфига
app.php
провайдеры и алиасы вынесены вmodules/CMS/providers.php
иmodules/CMS/aliases.php
. Собственные провайдеры и алиасы можно также добавлять вapp.php
-
bootstrap/app.php
были заменены ссылки на классы
Приложение состоит из двух частей:
- Backend
- Frontend
- Инициализация HTTP-запроса браузером
- Передача
URI
запроса в Роуты модулей - Поиск подходящего роута,
- Если система не установлена (отсутсвует файл
.env
) то все uri ведут на страницу установкиInstallerController
- если роут найден, передача его указанному контроллеру
- если роут не найден передача в контроллер FrontendController и поиск страницы по переданному
URI
- Если система не установлена (отсутсвует файл
В момент инициализации приложения происходит загрузка Сервис провайдеров из файла modules/CMS/providers.php
-
ModuleServiceProvider
- Инициализация загрузчика модулей
module.loader
и передача в него списка всех модулей из конфигаcms.modules
- Инициализация загрузчика модулей
-
RouteServiceProvider
- Подключение роутов из всех модулей через загрузчик
module.loader
(вызов метода ModuleContainer::loadRoutes()). Роуты модуля по умолчанию должны находиться в файлеmodulename/Http/routes.php
. Файл роутов каждого модуля инициализируется в своем окружении (namespace = \KodiCMS\Modulename\Http\Controllers
) - Если приложение установлено, то загружаются все роуты, иначе загружаются роуты только для Инсталлятора.
- Подключение роутов из всех модулей через загрузчик
- EventServiceProvider
- BusServiceProvider
-
AppServiceProvider
- Вызов в каждом модуле метода ModuleContainer::register() (добавление в стек загрузки
modulename\Providers\ModuleServiceProvider
если он сущестует) через загрузчикmodule.loader
- Вызов в каждом модуле метода ModuleContainer::boot() (инициализация
view
,translations
,assets
) - Для каждого модуля создаются неймспейсы для шаблонов и файлов переводов (Название модуля в нижнем регистре)
- Вызов в каждом модуле метода ModuleContainer::register() (добавление в стек загрузки
-
ConfigServiceProvider
- Загрузка файловых конфигов из модулей если приложение установлено через загрузчик
module.loader
(вызов метода ModuleContainer::loadConfig()) - Загрузка конфига из таблицы БД
config
и переопределение значений установленных в файлах
- Загрузка файловых конфигов из модулей если приложение установлено через загрузчик
При возникновении исключения вызывается KodiCMS\CMS\Exceptions\Handler
- Если установлено значение
app.debug = true
, то все исключения обрабатываются через модуль `Whoops - Если исключение вызвано в
API
контроллере, то вызов передается вKodiCMS\API\Exceptions\Response
и вызов методаResponse::createResponse(Exception)
и вывод ответа вjson
формате - Остальные исключения обрабатываются контроллером
KodiCMS\CMS\Http\Controllers\ErrorController
. В зависимости от кода ответа происходит поиск методаaction{code}
илиaction500
- Создание класса контейнера модуля
modulename\ModuleContaner.php
наследованного отModuleContainerInterface
- Создание сервис провайдера
modulename\Providers\ModuleServiceProvider.php