load(); // ============================================ // Configuration // ============================================ $env = $_ENV['APP_ENV'] ?? 'production'; $isDev = strtolower($env) === 'development'; // ============================================ // Initialisation de l'application Slim // ============================================ $app = AppFactory::create(); $responseFactory = $app->getResponseFactory(); // ============================================ // Initialisation des services // ============================================ // CSRF Guard (middleware) $csrf = new Guard($responseFactory); // Twig $twig = Twig::create( __DIR__ . '/../views', ['cache' => Config::getTwigCache($isDev)] ); // Ajouter l'extension CSRF à Twig $twig->addExtension(new CsrfExtension($csrf)); // Medoo (SQLite) $dbFile = Config::getDatabasePath(); $db = new Medoo([ 'type' => 'sqlite', 'database' => $dbFile, ]); // Exécuter les migrations Migrator::run($db); // HtmlPurifier (créé via la factory) $htmlPurifierCacheDir = __DIR__ . '/../var/cache/htmlpurifier'; $htmlPurifier = HtmlPurifierFactory::create($htmlPurifierCacheDir); // HtmlSanitizer (reçoit HTMLPurifier injecté) $htmlSanitizer = new HtmlSanitizer($htmlPurifier); // PostRepository $postRepository = new PostRepository($db); // ============================================ // Middleware // ============================================ $app->addBodyParsingMiddleware(); $app->add(TwigMiddleware::create($app, $twig)); // Enregistrer le middleware CSRF pour toutes les routes $app->add($csrf); // ============================================ // Routes // ============================================ $controller = new PostController($twig, $postRepository, $htmlSanitizer); Routes::register($app, $controller); // ============================================ // Error Handling // ============================================ $errorMiddleware = $app->addErrorMiddleware($isDev, $isDev, $isDev); // ============================================ // Run // ============================================ $app->run();