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 // ------------------------- function ensureDatabaseFile(string $path): void { if (!file_exists($path)) { if (!is_dir(dirname($path))) { mkdir(dirname($path), 0755, true); } touch($path); chmod($path, 0664); } } $dbFile = __DIR__ . '/../database/app.sqlite'; ensureDatabaseFile($dbFile); // ------------------------- // Instancier Medoo (SQLite) // ------------------------- $medooOptions = [ 'database_type' => 'sqlite', 'database_file' => $dbFile, 'error' => PDO::ERRMODE_EXCEPTION, 'charset' => 'utf8', ]; 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) $database->query( <<<'SQL' CREATE TABLE IF NOT EXISTS post ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, content TEXT NOT NULL ); SQL ); // ------------------------- // Services (instantiation simple et explicite) // ------------------------- $twig = new Twig(new FilesystemLoader(__DIR__ . '/../views'), ['cache' => false]); $postRepository = new App\Repositories\PostRepositoryMedoo($database); // ------------------------- // Slim app // ------------------------- $app = AppFactory::create(); // 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 '
Une erreur est survenue. Veuillez réessayer plus tard.
'; }); } // Middlewares essentiels $app->addBodyParsingMiddleware(); $app->add(TwigMiddleware::create($app, $twig)); // Charger routes (web.php reçoit explicitement $twig et $postRepository) (require __DIR__ . '/../src/Routes/web.php')($app, $twig, $postRepository); $app->run();