Skip to content

Жизненный цикл

Butschster edited this page May 10, 2015 · 1 revision

Жизненный цикл работы CMS

Изменения в стандартной сборке laravel

  • Из конфига app.php провайдеры и алиасы вынесены в modules/CMS/providers.php и modules/CMS/aliases.php. Собственные провайдеры и алиасы можно также добавлять в app.php
  • bootstrap/app.php были заменены ссылки на классы

Приложение состоит из двух частей:

  1. Backend
  2. Frontend

Стандартный жизненный цикл состоит из следующих пунктов:

  1. Инициализация HTTP-запроса браузером
  2. Передача URI запроса в Роуты модулей
  3. Поиск подходящего роута,
    • Если система не установлена (отсутсвует файл .env) то все uri ведут на страницу установки InstallerController
    • если роут найден, передача его указанному контроллеру
    • если роут не найден передача в контроллер FrontendController и поиск страницы по переданному URI

Загрузка модулей

В момент инициализации приложения происходит загрузка Сервис провайдеров из файла modules/CMS/providers.php

  1. ModuleServiceProvider
    • Инициализация загрузчика модулей module.loader и передача в него списка всех модулей из конфига cms.modules
  2. RouteServiceProvider
    • Подключение роутов из всех модулей через загрузчик module.loader (вызов метода ModuleContainer::loadRoutes()). Роуты модуля по умолчанию должны находиться в файле modulename/Http/routes.php. Файл роутов каждого модуля инициализируется в своем окружении (namespace = \KodiCMS\Modulename\Http\Controllers)
    • Если приложение установлено, то загружаются все роуты, иначе загружаются роуты только для Инсталлятора.
  3. EventServiceProvider
  4. BusServiceProvider
  5. AppServiceProvider
    • Вызов в каждом модуле метода ModuleContainer::register() (добавление в стек загрузки modulename\Providers\ModuleServiceProvider если он сущестует) через загрузчик module.loader
    • Вызов в каждом модуле метода ModuleContainer::boot() (инициализация view, translations, assets)
    • Для каждого модуля создаются неймспейсы для шаблонов и файлов переводов (Название модуля в нижнем регистре)
  6. 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

Способы влиять на процесс загрузки приложения

  1. Создание класса контейнера модуля modulename\ModuleContaner.php наследованного от ModuleContainerInterface
  2. Создание сервис провайдера modulename\Providers\ModuleServiceProvider.php