moved db name into config
This commit is contained in:
@@ -1,56 +1,90 @@
|
|||||||
<?php
|
<?php
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/* -------------------------------------------------
|
||||||
|
* Autoload Composer + notre configuration RedBean
|
||||||
|
* ------------------------------------------------- */
|
||||||
require __DIR__ . '/../vendor/autoload.php';
|
require __DIR__ . '/../vendor/autoload.php';
|
||||||
require __DIR__ . '/../src/Config/redbean.php';
|
require __DIR__ . '/../src/Config/redbean.php';
|
||||||
|
|
||||||
|
/* -------------------------------------------------
|
||||||
|
* Imports (facades, DI, Slim, Twig, etc.)
|
||||||
|
* ------------------------------------------------- */
|
||||||
use DI\ContainerBuilder;
|
use DI\ContainerBuilder;
|
||||||
use Slim\Factory\AppFactory;
|
use Slim\Factory\AppFactory;
|
||||||
use Slim\Views\Twig;
|
use Slim\Views\Twig;
|
||||||
use Slim\Views\TwigMiddleware;
|
use Slim\Views\TwigMiddleware;
|
||||||
use Twig\Loader\FilesystemLoader;
|
use Twig\Loader\FilesystemLoader;
|
||||||
use RedBeanPHP\R; // <-- import de la façade RedBean
|
use RedBeanPHP\R; // façade RedBean (nécessaire pour le service DB)
|
||||||
|
|
||||||
// -------------------------------------------------
|
/* -------------------------------------------------
|
||||||
// Conteneur DI
|
* Construction du conteneur DI
|
||||||
// -------------------------------------------------
|
* ------------------------------------------------- */
|
||||||
$containerBuilder = new ContainerBuilder();
|
$containerBuilder = new ContainerBuilder();
|
||||||
|
|
||||||
$containerBuilder->addDefinitions([
|
$containerBuilder->addDefinitions([
|
||||||
|
|
||||||
// Twig
|
/* -------------------------------------------------
|
||||||
|
* Service Twig (template engine)
|
||||||
|
* ------------------------------------------------- */
|
||||||
Twig::class => function () {
|
Twig::class => function () {
|
||||||
$loader = new FilesystemLoader(__DIR__ . '/../views');
|
$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 () {
|
'db' => function () {
|
||||||
$dbPath = __DIR__ . '/../database/app.sqlite';
|
// Le chemin du fichier SQLite est déterminé dans redbean.php
|
||||||
initRedBean($dbPath); // crée le fichier + connexion
|
$dbPath = getDefaultDbPath(); // ex. …/database/app.sqlite ou autre via DB_FILE
|
||||||
return R::getDatabaseAdapter(); // valeur retournée (facultatif)
|
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();
|
$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
|
$container->get('db'); // déclenche initRedBean() avant le chargement des routes
|
||||||
|
|
||||||
|
/* -------------------------------------------------
|
||||||
|
* Instanciation de l’application Slim avec le conteneur
|
||||||
|
* ------------------------------------------------- */
|
||||||
AppFactory::setContainer($container);
|
AppFactory::setContainer($container);
|
||||||
$app = AppFactory::create();
|
$app = AppFactory::create();
|
||||||
|
|
||||||
|
/* -------------------------------------------------
|
||||||
|
* Middleware d’erreur (affiche les traces en dev)
|
||||||
|
* ------------------------------------------------- */
|
||||||
$app->addErrorMiddleware(true, true, true);
|
$app->addErrorMiddleware(true, true, true);
|
||||||
|
|
||||||
|
/* -------------------------------------------------
|
||||||
|
* Middleware Twig – rend les vues disponibles
|
||||||
|
* ------------------------------------------------- */
|
||||||
$twig = $container->get(Twig::class);
|
$twig = $container->get(Twig::class);
|
||||||
$app->add(TwigMiddleware::create($app, $twig));
|
$app->add(TwigMiddleware::create($app, $twig));
|
||||||
|
|
||||||
|
/* -------------------------------------------------
|
||||||
|
* Chargement dynamique de toutes les définitions de routes
|
||||||
|
* ------------------------------------------------- */
|
||||||
foreach (glob(__DIR__ . '/../src/Routes/*.routes.php') as $file) {
|
foreach (glob(__DIR__ . '/../src/Routes/*.routes.php') as $file) {
|
||||||
|
// Chaque fichier retourne une closure qui reçoit $app
|
||||||
(require $file)($app);
|
(require $file)($app);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------------
|
||||||
|
* Démarrage de l’application
|
||||||
|
* ------------------------------------------------- */
|
||||||
$app->run();
|
$app->run();
|
||||||
|
|||||||
@@ -4,22 +4,65 @@ declare(strict_types=1);
|
|||||||
use RedBeanPHP\R;
|
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
|
function ensureDatabaseFile(string $path): void
|
||||||
{
|
{
|
||||||
if (!file_exists($path)) {
|
if (!file_exists($path)) {
|
||||||
|
// crée un fichier vide
|
||||||
touch($path);
|
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
|
function initRedBean(string $dbPath): void
|
||||||
{
|
{
|
||||||
|
// 1. création éventuelle du fichier
|
||||||
ensureDatabaseFile($dbPath);
|
ensureDatabaseFile($dbPath);
|
||||||
|
|
||||||
|
// 2. connexion à la base SQLite
|
||||||
R::setup('sqlite:' . $dbPath);
|
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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user