Загрузчик (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();