<?php return [\Doctrine\ORM\EntityManager::class => function (\Domynation\Config\ConfigInterface $config) { $devMode = !IS_PRODUCTION; $config = Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration($config->get('entityDirectories'), $devMode); if (IS_PRODUCTION) { $config->setMetadataCacheImpl(new \Doctrine\Common\Cache\ApcuCache()); $config->setQueryCacheImpl(new \Doctrine\Common\Cache\ApcuCache()); } // Uncomment the following to debug every request made to the DB //$config->setSQLLogger(new Doctrine\DBAL\Logging\EchoSQLLogger); return Doctrine\ORM\EntityManager::create(['driver' => DB_DRIVER, 'dbname' => DB_DATABASE, 'user' => DB_USER, 'password' => DB_PASSWORD], $config); }, \Doctrine\DBAL\Connection::class => function () { $db = \Doctrine\DBAL\DriverManager::getConnection(['driver' => DB_DRIVER, 'dbname' => DB_DATABASE, 'user' => DB_USER, 'password' => DB_PASSWORD], new \Doctrine\DBAL\Configuration()); // @todo: Extremely ugly hack until all the event listeners are refactored. \Event::setDatabase($db); return $db; }, \Domynation\Bus\CommandBusInterface::class => function (\Interop\Container\ContainerInterface $container, \Domynation\Authentication\AuthenticatorInterface $auth, \Domynation\Eventing\EventDispatcherInterface $dispatcher, \Domynation\Cache\CacheInterface $cache) { $busLogger = new Monolog\Logger('Bus_logger'); $busLogger->pushHandler(new Monolog\Handler\StreamHandler(PATH_BASE . '/logs/bus.log', Monolog\Logger::INFO)); return new Domynation\Bus\BasicCommandBus($container, $dispatcher, [new \Domynation\Bus\Middlewares\AuthorizationMiddleware($auth), new \Domynation\Bus\Middlewares\CachingMiddleware($cache), new \Domynation\Bus\Middlewares\LoggingMiddleware($busLogger, $auth), new \Domynation\Bus\Middlewares\HandlingMiddleware()]); }, \Domynation\Http\Router::class => function (\Interop\Container\ContainerInterface $container, \Domynation\Authentication\UserInterface $user) { $routerLogger = new Monolog\Logger('Router_logger'); $routerLogger->pushHandler(new Monolog\Handler\StreamHandler(PATH_BASE . '/logs/router.log', Monolog\Logger::INFO)); return new \Domynation\Http\Router($container, new \Domynation\Http\AuthenticationMiddleware($user), new \Domynation\Http\AuthorizationMiddleware($user), new \Domynation\Http\ValidationMiddleware($container), new \Domynation\Http\LoggingMiddleware($routerLogger, $user), new \Domynation\Http\HandlingMiddleware($container)); }, \Domynation\Cache\CacheInterface::class => function () { switch (CACHE_DRIVER) { case 'redis': return new \Domynation\Cache\RedisCache(REDIS_HOST, REDIS_PORT); default: return new \Domynation\Cache\InMemoryCache();