Add MariaDB container; add PDO connection; add error middleware
This commit is contained in:
parent
114a67dbe4
commit
2bb7ea54a2
20
.env.develop
20
.env.develop
|
|
@ -1,7 +1,23 @@
|
||||||
# .env.development: Environment variables for local development
|
# .env.development: Environment variables for local development
|
||||||
|
|
||||||
# Set composer cache directory
|
# composer: Set cache directory
|
||||||
COMPOSER_CACHE_DIR=./.composer
|
COMPOSER_CACHE_DIR=./.composer
|
||||||
|
|
||||||
# Disable Twig cache
|
# MariaDB container
|
||||||
|
MYSQL_RANDOM_ROOT_PASSWORD=yes
|
||||||
|
MYSQL_DATABASE=mailusers
|
||||||
|
MYSQL_USER=mailaccountadmin
|
||||||
|
MYSQL_PASSWORD=mailaccountadmin
|
||||||
|
|
||||||
|
# App settings
|
||||||
|
APP_DEBUG=true
|
||||||
|
|
||||||
|
# - Disable Twig cache
|
||||||
TWIG_CACHE_DIR=
|
TWIG_CACHE_DIR=
|
||||||
|
TWIG_STRICT=true
|
||||||
|
|
||||||
|
# - Database credentials
|
||||||
|
DB_HOST=db
|
||||||
|
DB_DATABASE=mailusers
|
||||||
|
DB_USER=mailaccountadmin
|
||||||
|
DB_PASSWORD=mailaccountadmin
|
||||||
|
|
|
||||||
|
|
@ -12,3 +12,18 @@ services:
|
||||||
volumes:
|
volumes:
|
||||||
- ./:/var/www/
|
- ./:/var/www/
|
||||||
user: ${DOCKER_UID}
|
user: ${DOCKER_UID}
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: mariadb
|
||||||
|
env_file:
|
||||||
|
- .env.develop
|
||||||
|
volumes:
|
||||||
|
- db_data:/var/lib/mysql
|
||||||
|
|
||||||
|
adminer:
|
||||||
|
image: adminer
|
||||||
|
ports:
|
||||||
|
- 8099:8080
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
db_data:
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ $settings = new Settings();
|
||||||
$container = Dependencies::createContainer($settings);
|
$container = Dependencies::createContainer($settings);
|
||||||
$app = AppFactory::createFromContainer($container);
|
$app = AppFactory::createFromContainer($container);
|
||||||
|
|
||||||
Middlewares::setMiddlewares($app);
|
Middlewares::setMiddlewares($app, $settings);
|
||||||
Routes::setRoutes($app);
|
Routes::setRoutes($app);
|
||||||
|
|
||||||
$app->run();
|
$app->run();
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,16 @@ namespace MailAccountAdmin;
|
||||||
|
|
||||||
use DI\Container;
|
use DI\Container;
|
||||||
use MailAccountAdmin\Login\LoginController;
|
use MailAccountAdmin\Login\LoginController;
|
||||||
|
use PDO;
|
||||||
use Psr\Container\ContainerInterface;
|
use Psr\Container\ContainerInterface;
|
||||||
use Slim\Views\Twig;
|
use Slim\Views\Twig;
|
||||||
|
|
||||||
class Dependencies
|
class Dependencies
|
||||||
{
|
{
|
||||||
private const SETTINGS = 'settings';
|
public const SETTINGS = 'settings';
|
||||||
private const TWIG = 'view';
|
public const TWIG = 'view';
|
||||||
private const TWIG_TEMPLATE_DIR = __DIR__ . '/../templates';
|
private const TWIG_TEMPLATE_DIR = __DIR__ . '/../templates';
|
||||||
|
public const DATABASE = 'database';
|
||||||
|
|
||||||
public static function createContainer(Settings $settings): Container
|
public static function createContainer(Settings $settings): Container
|
||||||
{
|
{
|
||||||
|
|
@ -29,6 +31,22 @@ class Dependencies
|
||||||
return Twig::create(self::TWIG_TEMPLATE_DIR, $settings->getTwigSettings());
|
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,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
// Login, registration, authentication
|
// Login, registration, authentication
|
||||||
$container->set(LoginController::class, function (ContainerInterface $c) {
|
$container->set(LoginController::class, function (ContainerInterface $c) {
|
||||||
return new LoginController(
|
return new LoginController(
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,11 @@ use Slim\Views\TwigMiddleware;
|
||||||
|
|
||||||
class Middlewares
|
class Middlewares
|
||||||
{
|
{
|
||||||
public static function setMiddlewares(App $app): void
|
public static function setMiddlewares(App $app, Settings $settings): void
|
||||||
{
|
{
|
||||||
|
$displayErrorDetails = $settings->isDebugMode();
|
||||||
|
|
||||||
|
$app->addErrorMiddleware($displayErrorDetails, true, true);
|
||||||
$app->add(TwigMiddleware::createFromContainer($app));
|
$app->add(TwigMiddleware::createFromContainer($app));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,27 @@ namespace MailAccountAdmin;
|
||||||
|
|
||||||
class Settings
|
class Settings
|
||||||
{
|
{
|
||||||
|
public function isDebugMode(): bool
|
||||||
|
{
|
||||||
|
return getenv('APP_DEBUG') === 'true';
|
||||||
|
}
|
||||||
|
|
||||||
public function getTwigSettings(): array
|
public function getTwigSettings(): array
|
||||||
{
|
{
|
||||||
$cacheDir = getenv('TWIG_CACHE_DIR');
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'cache' => !empty($cacheDir) ? $cacheDir : false,
|
'cache' => getenv('TWIG_CACHE_DIR') ?: false,
|
||||||
|
'strict_variables' => getenv('TWIG_STRICT') === 'true',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDatabaseSettings(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'host' => getenv('DB_HOST') ?: 'localhost',
|
||||||
|
'port' => getenv('DB_PORT') ?: 3306,
|
||||||
|
'dbname' => getenv('DB_DATABASE') ?: '',
|
||||||
|
'username' => getenv('DB_USERNAME') ?: '',
|
||||||
|
'password' => getenv('DB_PASSWORD') ?: '',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue