Fork me on GitHub

Загрузчик (Bootstrap.php)

Класс Загрузчика Bootstrap app/Bootstrap.php выполняет следующие методы:

  • Создание приложения __construct()
// Create app
$app = new Silex\Application();
$this->app = $app;
  • Создание обработчиков middleware _iniMiddlewares
  • Конфигурация приложения _iniConfig
  • Инициализация провайдеров _iniProviders
  • Инициализация сервисов _iniServices и _extendServices
  • Инициализация контроллеров _iniControllers
  • Инициализация приложения _iniApplication

Создание обработчиков middleware

Создаются обработчики событий в разных точках цикла обработки запроса.

  • В обработчике события, которое возникает до обработки маршрутизации и обработки безопасности запроса от клиента, происходит преобразование данных из Json формата в PHP массив, если такого типа данные присутствуют в запросе.
  • В обработчике события, которое возникает после обработки маршрутизации и обработки безопасности запроса от клиента, происходит сохранение имени маршрута и его параметров.
  • В обработчике события, которое возникает после ответа клиенту на его запрос, происходит сохранение информации о длительности цикла обработки запроса, потребляемой при этом памяти и длительности отдельных этапов обработки запроса.

Конфигурация приложения

Здесь определяется тип конфигурации.

// Set type configuration
$app['yml_config'] = FALSE;

Конфигурация задается с помощью yml файлов или с помощью ini файла.

Здесь устанавливаются значения основных параметров вашей конфигурации, которые могут использоваться в других ваших конфигурациях. Значения параметров можно получить через $app['config']['parameters'].

Значения основных параметров:

  • Временная зона (timezone)
  • Язык локализации (locale)
  • Цветовая схема сайта (scheme)
  • Признак отладки (debug)
  • Окружающая среда (environment)
  • Параметры базы данных (db.driver, db.path, db.name, db.models.path, db.models.namespace, db.connection.production, db.connection.development, db.connection.test)
  • Email параметры (mail.host, mail.port, mail.username, mail.password)
  • PagerFanta параметры (pagerfanta.max_per_page, pagerfanta.proximity)

Инициализация провайдеров

Инициализация провайдеров тоже зависит от типа конфигурации. Если $app['yml_config'] = TRUE; то провайдеры устанавливаются так как показано ниже.

if ($app['yml_config']) {
    foreach ($app['config']['service_providers'] as $serviceProviderConfig) {
        $app->register(
                new $serviceProviderConfig['class'](
                (!isset($serviceProviderConfig['construct_parameters'])) ?
                        null : $serviceProviderConfig['construct_parameters']
                ), (isset($serviceProviderConfig['parameters']) &&
                null !== $serviceProviderConfig['parameters']) ?
                        $serviceProviderConfig['parameters'] : array()
        );
    }
}

Иначе провайдеры устанавливаются вручную.

...
// Monolog
$app->register(new Silex\Provider\MonologServiceProvider(), array(
    'monolog.logfile' => "{$app['config']['log_path']}/application.log",
    'monolog.name' => 'APPLICATION'
));
...

Инициализация сервисов

С помощью класса MyService app/Services/MyService.php устанавливаются сервисы app/Services/My.

Сюда входят следующие сервисы:

  • Работа с массивами (ArrayBox.php)
  • Работа с XML (CrXml.php)
  • Работа с HTTP (Http.php)
  • Работа с параметрами (ParamBox.php)
  • Работа со строками (String.php)
  • Общие функции (System.php)

С помощью класса Zf2Service app/Services/Zf2Service.php устанавливаются сервисы из Zend Framework 2 vendor/zendframework.

Сюда входят следующие сервисы:

С помощью метода _extendServices класса загрузчика app/Bootstrap.php расширяется функционал некоторых сервисов таких как: $app['translator'], $app['twig'].

Инициализация контроллеров

Создание и инициализация контроллеров происходит с помощью метода _iniControllers.

/**
 *  Initialization controllers
 * 
 * @param Application $app
 */
private function _iniControllers(Application $app) {

    ...

    // Load controllers
    foreach ($app['config']['controllers'] as $controllerServiceName => $controllerClass) {
        $app[$controllerServiceName] = $app->share(function () use ($app, $controllerClass) {
            return new $controllerClass($app);
        });
        $controller = $app[$controllerServiceName];
    }
}

Список классов контроллеров находиться в файле app/Resources/Config/parameters.yml.

Инициализация приложения

Здесь создаются директории, необходимые для функционирования приложения. Это делается при первом запуске приложения.

// Create application paths
$app['my']->get('config')->createAppPaths();