Various improvements

This commit is contained in:
julien
2026-03-09 02:33:58 +01:00
parent 6e5119348e
commit 41beedb964
6 changed files with 57 additions and 26 deletions

View File

@@ -9,6 +9,26 @@ use Slim\Views\Twig;
use Slim\Views\TwigMiddleware;
use Twig\Loader\FilesystemLoader;
use Medoo\Medoo;
use Dotenv\Dotenv;
// Charger .env
$dotenv = Dotenv::createImmutable(__DIR__ . '/../');
$dotenv->safeLoad(); // safeLoad pour tolérer l'absence du fichier en dev
// Environnement
$appEnv = strtolower($_ENV['APP_ENV'] ?? $_SERVER['APP_ENV'] ?? 'production');
$isDebug = ($appEnv === 'development' || $appEnv === 'dev');
// Configuration PHP display errors selon l'environnement
if ($isDebug) {
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
} else {
ini_set('display_errors', '0');
ini_set('display_startup_errors', '0');
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
}
// -------------------------
// DB SQLite + fichier
@@ -27,7 +47,7 @@ $dbFile = __DIR__ . '/../database/app.sqlite';
ensureDatabaseFile($dbFile);
// -------------------------
// Instancier Medoo (SQLite) — compatibilité options
// Instancier Medoo (SQLite)
// -------------------------
$medooOptions = [
'database_type' => 'sqlite',
@@ -35,14 +55,9 @@ $medooOptions = [
'error' => PDO::ERRMODE_EXCEPTION,
'charset' => 'utf8',
];
// Certaines variantes/versions de Medoo (selon l'installation/composer.lock)
// peuvent émettre un warning en cherchant 'database_name'.
// Dupliquer la valeur pour éviter le warning sans changer le comportement.
if (!isset($medooOptions['database_name'])) {
$medooOptions['database_name'] = $medooOptions['database_file'];
}
$database = new Medoo($medooOptions);
// Créer la table si nécessaire (schéma minimal)
@@ -57,25 +72,33 @@ SQL
);
// -------------------------
// Services
// Services (instantiation simple et explicite)
// -------------------------
$services = [];
$services['twig'] = new Twig(new FilesystemLoader(__DIR__ . '/../views'), ['cache' => false]);
$services['db'] = $database;
$services['post_repository'] = new App\Repositories\PostRepositoryMedoo($database);
$twig = new Twig(new FilesystemLoader(__DIR__ . '/../views'), ['cache' => false]);
$postRepository = new App\Repositories\PostRepositoryMedoo($database);
// -------------------------
// Slim app
// -------------------------
$app = AppFactory::create();
$app->addErrorMiddleware(true, true, true);
// Body parsing middleware nécessaire pour que getParsedBody() fonctionne
// Configurer Error Middleware selon l'environnement
$errorMiddleware = $app->addErrorMiddleware($isDebug, $isDebug, $isDebug);
// Optionnel : personnaliser le rendu d'erreur en production pour éviter fuite d'info
if (!$isDebug) {
$errorHandler = $errorMiddleware->getDefaultErrorHandler();
$errorHandler->registerErrorRenderer('text/html', function () {
// message générique sans trace
return '<html><head><meta charset="utf-8"><title>Erreur</title></head><body><h1>Erreur serveur</h1><p>Une erreur est survenue. Veuillez réessayer plus tard.</p></body></html>';
});
}
// Middlewares essentiels
$app->addBodyParsingMiddleware();
$app->add(TwigMiddleware::create($app, $twig));
$app->add(TwigMiddleware::create($app, $services['twig']));
// Charger routes et injecter services
(require __DIR__ . '/../src/Routes/web.php')($app, $services);
// Charger routes (web.php reçoit explicitement $twig et $postRepository)
(require __DIR__ . '/../src/Routes/web.php')($app, $twig, $postRepository);
$app->run();