This commit is contained in:
julien
2026-03-04 04:09:17 +01:00
parent ab8ac6b7fb
commit 82252d8a27
3 changed files with 35 additions and 58 deletions

View File

@@ -14,12 +14,7 @@ $ composer install
Créer le fichier vide pour la base de données : Créer le fichier vide pour la base de données :
``` ```
mkdir database && touch database/blog.sqlite mkdir database
```
Exécuter le script de migration:
```
$ php migrate.php
``` ```
Lancer le serveur de développement : Lancer le serveur de développement :

View File

@@ -1,80 +1,56 @@
<?php <?php
declare(strict_types=1); declare(strict_types=1);
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../src/Config/redbean.php';
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
// ------------------------------------------------- // -------------------------------------------------
// Autoloader Composer // Conteneur DI
// ------------------------------------------------- // -------------------------------------------------
require __DIR__ . '/../vendor/autoload.php';
/* -------------------------------------------------
Container (DI) configuration explicite
------------------------------------------------- */
$containerBuilder = new ContainerBuilder(); $containerBuilder = new ContainerBuilder();
$containerBuilder->addDefinitions([ $containerBuilder->addDefinitions([
// ----------------------------------------------------------------- // Twig
// Twig : création de linstance Slim\Views\Twig
// -----------------------------------------------------------------
Twig::class => function () { Twig::class => function () {
$loader = new FilesystemLoader(__DIR__ . '/../views'); $loader = new FilesystemLoader(__DIR__ . '/../views');
$settings = ['cache' => false]; // désactiver le cache en dev return new Twig($loader, ['cache' => false]); // désactivé en dev
return new Twig($loader, $settings);
}, },
// ----------------------------------------------------------------- // RedBean service DB
// Ajoute dautres services ici si besoin (logger, DB, etc.) 'db' => function () {
// ----------------------------------------------------------------- $dbPath = __DIR__ . '/../database/app.sqlite';
initRedBean($dbPath); // crée le fichier + connexion
return R::getDatabaseAdapter(); // valeur retournée (facultatif)
},
// …autres services
]); ]);
$container = $containerBuilder->build(); $container = $containerBuilder->build();
/* ------------------------------------------------- /* -------------------------------------------------
Instanciation de lapplication Slim avec le container Initialise la connexion DB dès le bootstrap
------------------------------------------------- */ ------------------------------------------------- */
$container->get('db'); // déclenche initRedBean() avant le chargement des routes
AppFactory::setContainer($container); AppFactory::setContainer($container);
$app = AppFactory::create(); $app = AppFactory::create();
/* -------------------------------------------------
Middleware derreur
------------------------------------------------- */
$app->addErrorMiddleware(true, true, true); $app->addErrorMiddleware(true, true, true);
/* ------------------------------------------------- $twig = $container->get(Twig::class);
Twig middleware on récupère explicitement le service Twig $app->add(TwigMiddleware::create($app, $twig));
------------------------------------------------- */
$twig = $container->get(Twig::class); // <-- récupération directe
$app->add(TwigMiddleware::create($app, $twig)); // <-- utilisation de create(), pas createFromContainer()
/* -------------------------------------------------
Vérification / création du fichier SQLite
------------------------------------------------- */
$dbFile = __DIR__ . '/../database/blog.sqlite';
if (!file_exists($dbFile)) {
touch($dbFile);
chmod($dbFile, 0664);
}
/* -------------------------------------------------
RedBeanPHP (connexion SQLite)
------------------------------------------------- */
require __DIR__ . '/../src/Config/redbean.php';
initRedBean($dbFile);
/* -------------------------------------------------
Chargement des routes
------------------------------------------------- */
foreach (glob(__DIR__ . '/../src/Routes/*.routes.php') as $file) { foreach (glob(__DIR__ . '/../src/Routes/*.routes.php') as $file) {
(require $file)($app); (require $file)($app);
} }
/* -------------------------------------------------
Démarrage de lapplication
------------------------------------------------- */
$app->run(); $app->run();

View File

@@ -3,17 +3,23 @@ declare(strict_types=1);
use RedBeanPHP\R; use RedBeanPHP\R;
/**
* Crée le fichier SQLite sil nexiste pas.
*/
function ensureDatabaseFile(string $path): void
{
if (!file_exists($path)) {
touch($path);
chmod($path, 0664); // rwrwr--
}
}
/** /**
* Initialise RedBeanPHP avec SQLite. * Initialise RedBeanPHP avec SQLite.
* Appelé depuis public/index.php avant le chargement des routes.
*/ */
function initRedBean(string $dbPath): void function initRedBean(string $dbPath): void
{ {
// Le préfixe « sqlite: » indique le driver SQLite ensureDatabaseFile($dbPath);
R::setup('sqlite:' . $dbPath); R::setup('sqlite:' . $dbPath);
R::freeze(false); // false en dev, true en prod
// En mode production on désactive le «freeze» pour que RedBean
// ne crée plus de tables automatiquement.
// Ici on garde le freeze à false pendant le développement.
R::freeze(false);
} }