diff --git a/app/src/Bootstrap.php b/app/src/Bootstrap.php index ec26019..254e932 100644 --- a/app/src/Bootstrap.php +++ b/app/src/Bootstrap.php @@ -33,6 +33,7 @@ use Slim\App; use Slim\Factory\AppFactory; use Slim\Psr7\Factory\ResponseFactory; use Slovocast\Infrastructure\Application\LoggerDefinition; +use Slovocast\Infrastructure\Application\ResponseFactoryDefinition; use Slovocast\Infrastructure\Application\SessionDefintion; use Slovocast\Middleware\SessionMiddleware; use Twig\Error\LoaderError; @@ -120,20 +121,51 @@ class Bootstrap protected static function initContainer(): Container { $containerBuilder = new ContainerBuilder(); - $config = self::initConfig(); + + $containerDefinitions = array_merge( + [ 'config' => $config ], + (new LoggerDefinition())->define(), + (new SessionDefintion())->define(), + (new ResponseFactoryDefinition())->define(), + ); + $containerBuilder->addDefinitions([ 'config' => $config, /** * Global logging */ - (new LoggerDefinition())->define(), + LoggerInterface::class => function (ContainerInterface $c) { + $logger = new Logger("default"); + $logger->pushHandler(new StreamHandler('php://stdout', Level::Info)); + return $logger; + }, /** * Session and Flash classes here */ - (new SessionDefintion())->define(), + SessionManagerInterface::class => function (ContainerInterface $container) { + return $container->get(SessionInterface::class); + }, + SessionInterface::class => function (ContainerInterface $container) { + $options = $container->get('config')->get('session'); + return new PhpSession($options); + }, + 'session' => function (ContainerInterface $container) { + return $container->get(SessionInterface::class); + }, + SessionMiddleware::class => function (ContainerInterface $container) { + return new SessionMiddleware( + $container->get(SessionManagerInterface::class), + $container->get(SessionInterface::class), + $container->get(LoggerInterface::class) + ); + }, + + UserSessionManagerInterface::class => function (ContainerInterface $container) { + return new UserSessionManager($container->get(SessionInterface::class)); + }, /** * Application DI diff --git a/app/src/Infrastructure/Application/DefinitionInterface.php b/app/src/Infrastructure/Application/DefinitionInterface.php deleted file mode 100644 index 5f6d07c..0000000 --- a/app/src/Infrastructure/Application/DefinitionInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -<?php - -namespace Slovocast\Infrastructure\Application; - -/** - * Ideally this would define the Container definition required for setting up - * dependencies within the PHP DI ContainerBuilder class - */ -interface DefinitionInterface -{ - /** - * @return array<string, mixed> The definition structure used for setting - * up a Container - */ - public function define(): array; -} diff --git a/app/src/Infrastructure/Application/LoggerDefinition.php b/app/src/Infrastructure/Application/LoggerDefinition.php deleted file mode 100644 index b7300b3..0000000 --- a/app/src/Infrastructure/Application/LoggerDefinition.php +++ /dev/null @@ -1,24 +0,0 @@ -<?php - -namespace Slovocast\Infrastructure\Application; - -use Psr\Container\ContainerInterface; -use Psr\Log\LoggerInterface; -use Monolog\Handler\StreamHandler; -use Monolog\Level; -use Monolog\Logger; -use Slovocast\Infrastructure\Application\DefinitionInterface; - -class LoggerDefinition implements DefinitionInterface -{ - public function define(): array - { - return [ - LoggerInterface::class => function (ContainerInterface $c) { - $logger = new Logger("default"); - $logger->pushHandler(new StreamHandler('php://stdout', Level::Info)); - return $logger; - } - ]; - } -} diff --git a/app/src/Infrastructure/Application/SessionDefinition.php b/app/src/Infrastructure/Application/SessionDefinition.php deleted file mode 100644 index cdd6c73..0000000 --- a/app/src/Infrastructure/Application/SessionDefinition.php +++ /dev/null @@ -1,42 +0,0 @@ -<?php - -namespace Slovocast\Infrastructure\Application; - -use Slovocast\Infrastructure\Application\DefinitionInterface; -use Slovocast\Infrastructure\Api\User\UserSessionManagerInterface; -use Slovocast\Infrastructure\User\UserSessionManager; -use Slovocast\Middleware\SessionMiddleware; -use Odan\Session\PhpSession; -use Odan\Session\SessionInterface; -use Odan\Session\SessionManagerInterface; -use Psr\Container\ContainerInterface; -use Psr\Log\LoggerInterface; - -class SessionDefintion implements DefinitionInterface -{ - public function define(): array - { - return [ - SessionManagerInterface::class => function (ContainerInterface $container) { - return $container->get(SessionInterface::class); - }, - SessionInterface::class => function (ContainerInterface $container) { - $options = $container->get('config')->get('session'); - return new PhpSession($options); - }, - 'session' => function (ContainerInterface $container) { - return $container->get(SessionInterface::class); - }, - SessionMiddleware::class => function (ContainerInterface $container) { - return new SessionMiddleware( - $container->get(SessionManagerInterface::class), - $container->get(SessionInterface::class), - $container->get(LoggerInterface::class) - ); - }, - UserSessionManagerInterface::class => function (ContainerInterface $container) { - return new UserSessionManager($container->get(SessionInterface::class)); - }, - ]; - } -}