Switching from NetBean to Medoo

This commit is contained in:
julien
2026-03-09 00:33:30 +01:00
parent 8d7aba5447
commit 001dc204af
10 changed files with 146 additions and 359 deletions

View File

@@ -2,90 +2,67 @@
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)
use Medoo\Medoo;
/* -------------------------------------------------
* Construction du conteneur DI
* ------------------------------------------------- */
$containerBuilder = new ContainerBuilder();
// -------------------------
// 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);
$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.)
// -----------------------------------------------------------------
// -------------------------
// Instancier Medoo (SQLite)
// -------------------------
$database = new Medoo([
'database_type' => 'sqlite',
'database_file' => $dbFile,
'error' => PDO::ERRMODE_EXCEPTION,
'charset' => 'utf8',
]);
/* -------------------------------------------------
* Build du conteneur
* ------------------------------------------------- */
$container = $containerBuilder->build();
// 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
);
/* -------------------------------------------------
* Initialise la connexion DB dès le bootstrap
* ------------------------------------------------- */
$container->get('db'); // déclenche initRedBean() avant le chargement des routes
// -------------------------
// Services
// -------------------------
$services = [];
$services['twig'] = new Twig(new FilesystemLoader(__DIR__ . '/../views'), ['cache' => false]);
$services['db'] = $database;
$services['post_repository'] = new App\Repositories\PostRepositoryMedoo($database);
/* -------------------------------------------------
* Instanciation de lapplication Slim avec le conteneur
* ------------------------------------------------- */
AppFactory::setContainer($container);
// -------------------------
// Slim app
// -------------------------
$app = AppFactory::create();
/* -------------------------------------------------
* Middleware derreur (affiche les traces en dev)
* ------------------------------------------------- */
$app->addErrorMiddleware(true, true, true);
$app->add(TwigMiddleware::create($app, $services['twig']));
/* -------------------------------------------------
* Middleware Twig rend les vues disponibles
* ------------------------------------------------- */
$twig = $container->get(Twig::class);
$app->add(TwigMiddleware::create($app, $twig));
// Charger routes et injecter services
(require __DIR__ . '/../src/Routes/web.php')($app, $services);
/* -------------------------------------------------
* 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();