Выполнение кода перед запуском приложения - лучший способ в Silex
Я строю приложение, для мониторинга сервера и фильтрации данных мониторинга. Это приложение использует устаревший код внешнего интерфейса инструмента мониторинга Zabbix, в котором есть некоторые файлы конфигурации, которые необходимо включить, и некоторые классы для работы с базой данных.
Есть три основных момента, которые я должен сделать, прежде чем начать взаимодействовать с базой данных:
DBstart();
$serviceFactory = new CApiServiceFactory();
API::setApiServiceFactory($serviceFactory);
CWebUser::login($_SERVER['PHP_AUTH_USER'], '');
Как я могу или должен интегрировать эти шаги при использовании Silex?
Класс API со статическими вызовами методов используется повсеместно.
1 ответ
Вы можете выполнить любой действительный php-код перед запуском приложения Silex:
<?php
require_once __DIR__.'/../vendor/autoload.php';
$app = new Silex\Application();
// the code you like to execute before the app starts goes here
DBstart();
$serviceFactory = new CApiServiceFactory();
API::setApiServiceFactory($serviceFactory);
CWebUser::login($_SERVER['PHP_AUTH_USER'], '');
// Silex app starts:
$app->run();
Но вы должны подумать об услугах и реорганизовать свой прежний код, чтобы использовать контейнер pimple для его фактической интеграции. Например:
$app['serviceFactory'] = $app->share(function () {
return new CApiServiceFactory;
});
....
// later, when you need the API:
API::setApiServiceFactory($app['serviceFactory']);