set(self::SETTINGS, $settings); // Twig template engine $container->set(self::TWIG, function (ContainerInterface $c) { /** @var Settings $settings */ $settings = $c->get(self::SETTINGS); return Twig::create(self::TWIG_TEMPLATE_DIR, $settings->getTwigSettings()); }); // Database connection $container->set(self::DATABASE, function (ContainerInterface $c) { /** @var Settings $settings */ $settings = $c->get(self::SETTINGS); $dbSettings = $settings->getDatabaseSettings(); return new PDO( "mysql:dbname={$dbSettings['dbname']};host={$dbSettings['host']};port={$dbSettings['port']}", $dbSettings['username'], $dbSettings['password'], [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ], ); }); // Repositories $container->set(AdminUserRepository::class, function (ContainerInterface $c) { return new AdminUserRepository( $c->get(self::DATABASE), ); }); $container->set(DomainRepository::class, function (ContainerInterface $c) { return new DomainRepository( $c->get(self::DATABASE), ); }); $container->set(AccountRepository::class, function (ContainerInterface $c) { return new AccountRepository( $c->get(self::DATABASE), ); }); $container->set(AliasRepository::class, function (ContainerInterface $c) { return new AliasRepository( $c->get(self::DATABASE), ); }); // Helper classes $container->set(UserHelper::class, function (ContainerInterface $c) { return new UserHelper( $c->get(AdminUserRepository::class), ); }); // Frontend controllers $container->set(LoginController::class, function (ContainerInterface $c) { return new LoginController( $c->get(self::TWIG), $c->get(UserHelper::class), $c->get(AdminUserRepository::class), ); }); $container->set(DashboardController::class, function (ContainerInterface $c) { return new DashboardController( $c->get(self::TWIG), $c->get(UserHelper::class), ); }); $container->set(DomainController::class, function (ContainerInterface $c) { return new DomainController( $c->get(self::TWIG), $c->get(UserHelper::class), $c->get(DomainRepository::class), ); }); $container->set(AccountController::class, function (ContainerInterface $c) { return new AccountController( $c->get(self::TWIG), $c->get(UserHelper::class), $c->get(AccountRepository::class), $c->get(AliasRepository::class), ); }); return $container; } }