From 7f906b6199b923f61cf8ff401d831692ae03801d Mon Sep 17 00:00:00 2001 From: julien Date: Wed, 4 Mar 2026 04:20:45 +0100 Subject: [PATCH] moved db name into config --- public/index.php | 60 +++++++++++++++++++++++++++++++++--------- src/Config/redbean.php | 51 ++++++++++++++++++++++++++++++++--- 2 files changed, 94 insertions(+), 17 deletions(-) diff --git a/public/index.php b/public/index.php index 2425708..362b7ff 100644 --- a/public/index.php +++ b/public/index.php @@ -1,56 +1,90 @@ addDefinitions([ - // Twig + /* ------------------------------------------------- + * Service Twig (template engine) + * ------------------------------------------------- */ Twig::class => function () { $loader = new FilesystemLoader(__DIR__ . '/../views'); - return new Twig($loader, ['cache' => false]); // désactivé en dev + // En développement on désactive le cache pour voir les changements immédiatement + return new Twig($loader, ['cache' => false]); }, - // RedBean – service DB + /* ------------------------------------------------- + * Service « db » – connexion RedBean + * ------------------------------------------------- */ 'db' => function () { - $dbPath = __DIR__ . '/../database/app.sqlite'; - initRedBean($dbPath); // crée le fichier + connexion - return R::getDatabaseAdapter(); // valeur retournée (facultatif) + // Le chemin du fichier SQLite est déterminé dans redbean.php + $dbPath = getDefaultDbPath(); // ex. …/database/app.sqlite ou autre via DB_FILE + initRedBean($dbPath); // crée le fichier + lance R::setup() + // Retourner l’adaptateur (facultatif, on le garde pour que le service existe) + return R::getDatabaseAdapter(); }, - // …autres services + // ----------------------------------------------------------------- + // Ajoutez d’autres services ici (logger, repository, etc.) + // ----------------------------------------------------------------- ]); +/* ------------------------------------------------- + * Build du conteneur + * ------------------------------------------------- */ $container = $containerBuilder->build(); /* ------------------------------------------------- - Initialise la connexion DB dès le bootstrap - ------------------------------------------------- */ + * Initialise la connexion DB dès le bootstrap + * ------------------------------------------------- */ $container->get('db'); // déclenche initRedBean() avant le chargement des routes +/* ------------------------------------------------- + * Instanciation de l’application Slim avec le conteneur + * ------------------------------------------------- */ AppFactory::setContainer($container); $app = AppFactory::create(); +/* ------------------------------------------------- + * Middleware d’erreur (affiche les traces en dev) + * ------------------------------------------------- */ $app->addErrorMiddleware(true, true, true); +/* ------------------------------------------------- + * Middleware Twig – rend les vues disponibles + * ------------------------------------------------- */ $twig = $container->get(Twig::class); $app->add(TwigMiddleware::create($app, $twig)); +/* ------------------------------------------------- + * Chargement dynamique de toutes les définitions de routes + * ------------------------------------------------- */ foreach (glob(__DIR__ . '/../src/Routes/*.routes.php') as $file) { + // Chaque fichier retourne une closure qui reçoit $app (require $file)($app); } +/* ------------------------------------------------- + * Démarrage de l’application + * ------------------------------------------------- */ $app->run(); diff --git a/src/Config/redbean.php b/src/Config/redbean.php index c2e6df6..aa9c9b7 100644 --- a/src/Config/redbean.php +++ b/src/Config/redbean.php @@ -4,22 +4,65 @@ declare(strict_types=1); use RedBeanPHP\R; /** - * Crée le fichier SQLite s’il n’existe pas. + * ----------------------------------------------------------------- + * Helper – crée le fichier SQLite s’il n’existe pas. + * ----------------------------------------------------------------- + * + * @param string $path Chemin complet du fichier SQLite. */ function ensureDatabaseFile(string $path): void { if (!file_exists($path)) { + // crée un fichier vide touch($path); - chmod($path, 0664); // rw‑rw‑r-- + // permissions rw‑rw‑r-- (0664) – suffisantes pour le serveur web + chmod($path, 0664); } } /** - * Initialise RedBeanPHP avec SQLite. + * ----------------------------------------------------------------- + * Initialise RedBeanPHP avec le driver SQLite. + * ----------------------------------------------------------------- + * + * Cette fonction : + * 1. S’assure que le fichier SQLite existe (via ensureDatabaseFile()). + * 2. Lance R::setup() avec le préfixe « sqlite: ». + * 3. Définit le mode « freeze » (false en dev, true en prod). + * + * @param string $dbPath Chemin complet du fichier SQLite. */ function initRedBean(string $dbPath): void { + // 1. création éventuelle du fichier ensureDatabaseFile($dbPath); + + // 2. connexion à la base SQLite R::setup('sqlite:' . $dbPath); - R::freeze(false); // false en dev, true en prod + + // 3. pendant le développement on laisse freeze à false + // (RedBean crée/modifie les tables automatiquement) + R::freeze(false); +} + +/** + * ----------------------------------------------------------------- + * Retourne le chemin par défaut du fichier SQLite. + * ----------------------------------------------------------------- + * + * Le nom du fichier peut être surchargé via la variable d’environnement + * DB_FILE (ou via un .env chargé par l’application). Ainsi on évite + * de coder en dur le nom du fichier dans le bootstrap. + * + * @return string Chemin absolu du fichier SQLite. + */ +function getDefaultDbPath(): string +{ + // Le répertoire « database » se trouve deux niveaux au-dessus de ce fichier + $baseDir = realpath(__DIR__ . '/../../database'); + + // Nom du fichier – valeur par défaut « app.sqlite » + $fileName = getenv('DB_FILE') ?: 'app.sqlite'; + + return $baseDir . DIRECTORY_SEPARATOR . $fileName; }