Выполнение кода перед запуском приложения - лучший способ в 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']);
Другие вопросы по тегам