Add boilerplate code, Docker environment, Makefile etc.

This commit is contained in:
Lexi / Zoe 2021-07-23 03:18:33 +02:00
parent 1e9d351173
commit 114a67dbe4
Signed by: binaryDiv
GPG key ID: F8D4956E224DA232
21 changed files with 3766 additions and 0 deletions

41
src/Dependencies.php Normal file
View file

@ -0,0 +1,41 @@
<?php
declare(strict_types=1);
namespace MailAccountAdmin;
use DI\Container;
use MailAccountAdmin\Login\LoginController;
use Psr\Container\ContainerInterface;
use Slim\Views\Twig;
class Dependencies
{
private const SETTINGS = 'settings';
private const TWIG = 'view';
private const TWIG_TEMPLATE_DIR = __DIR__ . '/../templates';
public static function createContainer(Settings $settings): Container
{
$container = new Container();
// App settings
$container->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());
});
// Login, registration, authentication
$container->set(LoginController::class, function (ContainerInterface $c) {
return new LoginController(
$c->get(self::TWIG)
);
});
return $container;
}
}

View file

@ -0,0 +1,27 @@
<?php
declare(strict_types=1);
namespace MailAccountAdmin\Login;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Views\Twig;
class LoginController
{
/** @var Twig */
private $view;
public function __construct(Twig $view)
{
$this->view = $view;
}
public function showLoginPage(Request $request, Response $response): Response
{
$renderData = [
];
return $this->view->render($response, 'login.html', $renderData);
}
}

15
src/Middlewares.php Normal file
View file

@ -0,0 +1,15 @@
<?php
declare(strict_types=1);
namespace MailAccountAdmin;
use Slim\App;
use Slim\Views\TwigMiddleware;
class Middlewares
{
public static function setMiddlewares(App $app): void
{
$app->add(TwigMiddleware::createFromContainer($app));
}
}

15
src/Routes.php Normal file
View file

@ -0,0 +1,15 @@
<?php
declare(strict_types=1);
namespace MailAccountAdmin;
use MailAccountAdmin\Login\LoginController;
use Slim\App;
class Routes
{
public static function setRoutes(App $app): void
{
$app->get('/', LoginController::class . ':showLoginPage');
}
}

16
src/Settings.php Normal file
View file

@ -0,0 +1,16 @@
<?php
declare(strict_types=1);
namespace MailAccountAdmin;
class Settings
{
public function getTwigSettings(): array
{
$cacheDir = getenv('TWIG_CACHE_DIR');
return [
'cache' => !empty($cacheDir) ? $cacheDir : false,
];
}
}