Switching from NetBean to Medoo
This commit is contained in:
117
public/index.php
117
public/index.php
@@ -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 l’adaptateur (facultatif, on le garde pour que le service existe)
|
||||
return R::getDatabaseAdapter();
|
||||
},
|
||||
|
||||
// -----------------------------------------------------------------
|
||||
// Ajoutez d’autres 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 l’application Slim avec le conteneur
|
||||
* ------------------------------------------------- */
|
||||
AppFactory::setContainer($container);
|
||||
// -------------------------
|
||||
// Slim app
|
||||
// -------------------------
|
||||
$app = AppFactory::create();
|
||||
|
||||
/* -------------------------------------------------
|
||||
* Middleware d’erreur (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 l’application
|
||||
* ------------------------------------------------- */
|
||||
$app->run();
|
||||
|
||||
Reference in New Issue
Block a user