public function run(Api $api, DiInterface $di, Config $config)
{
/**
* @description Config - \Phalcon\Config
*/
$di->setShared(Services::CONFIG, $config);
/**
* @description Phalcon - \Phalcon\Db\Adapter\Pdo\Mysql
*/
$di->set(Services::DB, function () use($config, $di) {
$config = $config->get('database')->toArray();
$adapter = $config['adapter'];
unset($config['adapter']);
$class = 'Phalcon\\Db\\Adapter\\Pdo\\' . $adapter;
$connection = new $class($config);
// Assign the eventsManager to the db adapter instance
$connection->setEventsManager($di->get(Services::EVENTS_MANAGER));
return $connection;
});
/**
* @description Phalcon - \Phalcon\Mvc\Url
*/
$di->set(Services::URL, function () use($config) {
$url = new UrlResolver();
$url->setBaseUri($config->get('application')->baseUri);
return $url;
});
/**
* @description Phalcon - \Phalcon\Mvc\View\Simple
*/
$di->set(Services::VIEW, function () use($config) {
$view = new View();
$view->setViewsDir($config->get('application')->viewsDir);
return $view;
});
/**
* @description Phalcon - EventsManager
*/
$di->setShared(Services::EVENTS_MANAGER, function () use($di, $config) {
return new EventsManager();
});
/**
* @description Phalcon - TokenParsers
*/
$di->setShared(Services::TOKEN_PARSER, function () use($di, $config) {
return new JWTTokenParser($config->get('authentication')->secret, JWTTokenParser::ALGORITHM_HS256);
});
/**
* @description Phalcon - AuthManager
*/
$di->setShared(Services::AUTH_MANAGER, function () use($di, $config) {
$authManager = new AuthManager($config->get('authentication')->expirationTime);
$authManager->registerAccountType(UsernameAccountType::NAME, new UsernameAccountType());
return $authManager;
});
/**
* @description Phalcon - \Phalcon\Mvc\Model\Manager
*/
$di->setShared(Services::MODELS_MANAGER, function () use($di) {
$modelsManager = new ModelsManager();
return $modelsManager->setEventsManager($di->get(Services::EVENTS_MANAGER));
});
/**
* @description PhalconRest - \League\Fractal\Manager
*/
$di->setShared(Services::FRACTAL_MANAGER, function () {
$fractal = new FractalManager();
$fractal->setSerializer(new CustomSerializer());
return $fractal;
});
/**
* @description PhalconRest - \PhalconRest\User\Service
*/
$di->setShared(Services::USER_SERVICE, new UserService());
}