This repository has been archived on 2026-03-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blog-slim.old/public/index.php
2026-03-04 04:20:45 +01:00

91 lines
3.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
declare(strict_types=1);
/* -------------------------------------------------
* Autoload Composer + notre configuration RedBean
* ------------------------------------------------- */
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../src/Config/redbean.php';
/* -------------------------------------------------
* Imports (facades, DI, Slim, Twig, etc.)
* ------------------------------------------------- */
use DI\ContainerBuilder;
use Slim\Factory\AppFactory;
use Slim\Views\Twig;
use Slim\Views\TwigMiddleware;
use Twig\Loader\FilesystemLoader;
use RedBeanPHP\R; // façade RedBean (nécessaire pour le service DB)
/* -------------------------------------------------
* Construction du conteneur DI
* ------------------------------------------------- */
$containerBuilder = new ContainerBuilder();
$containerBuilder->addDefinitions([
/* -------------------------------------------------
* Service Twig (template engine)
* ------------------------------------------------- */
Twig::class => function () {
$loader = new FilesystemLoader(__DIR__ . '/../views');
// En développement on désactive le cache pour voir les changements immédiatement
return new Twig($loader, ['cache' => false]);
},
/* -------------------------------------------------
* Service « db » connexion RedBean
* ------------------------------------------------- */
'db' => function () {
// 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 ladaptateur (facultatif, on le garde pour que le service existe)
return R::getDatabaseAdapter();
},
// -----------------------------------------------------------------
// Ajoutez dautres services ici (logger, repository, etc.)
// -----------------------------------------------------------------
]);
/* -------------------------------------------------
* Build du conteneur
* ------------------------------------------------- */
$container = $containerBuilder->build();
/* -------------------------------------------------
* Initialise la connexion DB dès le bootstrap
* ------------------------------------------------- */
$container->get('db'); // déclenche initRedBean() avant le chargement des routes
/* -------------------------------------------------
* Instanciation de lapplication Slim avec le conteneur
* ------------------------------------------------- */
AppFactory::setContainer($container);
$app = AppFactory::create();
/* -------------------------------------------------
* Middleware derreur (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 lapplication
* ------------------------------------------------- */
$app->run();