Added doc

This commit is contained in:
julien
2026-03-09 10:15:08 +01:00
parent 60bd8178e8
commit 393561f6b0
4 changed files with 155 additions and 36 deletions

View File

@@ -10,16 +10,27 @@ use Slim\Views\TwigMiddleware;
use Twig\Loader\FilesystemLoader;
use Medoo\Medoo;
use Dotenv\Dotenv;
use Throwable;
// Charger .env
// Charger .env (tolérant l'absence du fichier)
$dotenv = Dotenv::createImmutable(__DIR__ . '/../');
$dotenv->safeLoad(); // safeLoad pour tolérer l'absence du fichier en dev
$dotenv->safeLoad();
// Environnement
$appEnv = strtolower($_ENV['APP_ENV'] ?? $_SERVER['APP_ENV'] ?? 'production');
$isDebug = ($appEnv === 'development' || $appEnv === 'dev');
// Configuration centralisée (valeurs raisonnables par défaut)
$config = [
'env' => strtolower($_ENV['APP_ENV'] ?? $_SERVER['APP_ENV'] ?? 'production'),
'twig' => [
'cache' => false, // => mettre un chemin en production, ex: __DIR__ . '/../var/cache/twig'
],
'db' => [
'file' => __DIR__ . '/../database/app.sqlite',
'file_mode' => 0664,
],
];
// Configuration PHP display errors selon l'environnement
$isDebug = ($config['env'] === 'development' || $config['env'] === 'dev');
// Affichage des erreurs selon l'environnement
if ($isDebug) {
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
@@ -31,33 +42,25 @@ if ($isDebug) {
}
// -------------------------
// DB SQLite + fichier
// Base de données (SQLite)
// -------------------------
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 = $config['db']['file'];
if (!file_exists($dbFile)) {
if (!is_dir(dirname($dbFile))) {
mkdir(dirname($dbFile), 0755, true);
}
touch($dbFile);
chmod($dbFile, $config['db']['file_mode']);
}
$dbFile = __DIR__ . '/../database/app.sqlite';
ensureDatabaseFile($dbFile);
// -------------------------
// Instancier Medoo (SQLite)
// -------------------------
// Options Medoo (SQLite)
$medooOptions = [
'database_type' => 'sqlite',
'database_file' => $dbFile,
'error' => PDO::ERRMODE_EXCEPTION,
'database_name' => $dbFile, // nécessaire pour certaines versions de Medoo
'charset' => 'utf8',
];
if (!isset($medooOptions['database_name'])) {
$medooOptions['database_name'] = $medooOptions['database_file'];
}
// Instancier Medoo
$database = new Medoo($medooOptions);
// Créer la table si nécessaire (schéma minimal)
@@ -74,27 +77,42 @@ SQL
// -------------------------
// Services (container simple)
// -------------------------
/** @var array{view: Twig, postRepository: \App\Repositories\PostRepositoryMedoo} $container */
$container = [];
// Vue Twig
$container['view'] = new Twig(new FilesystemLoader(__DIR__ . '/../views'), ['cache' => false]);
/**
* Construire les services et les retourner dans le container.
*
* Reste modulaire : la fonction reste locale et conserve la variable $container = [].
*
* @param array $config
* @param Medoo $database
* @return array
*/
$container = (function (array $config, Medoo $database): array {
$services = [];
// Repository Post (Medoo)
$container['postRepository'] = new App\Repositories\PostRepositoryMedoo($database);
// Vue Twig
$services['view'] = new Twig(new FilesystemLoader(__DIR__ . '/../views'), ['cache' => $config['twig']['cache']]);
// Repository Post (Medoo)
$services['postRepository'] = new App\Repositories\PostRepositoryMedoo($database);
return $services;
})($config, $database);
// -------------------------
// Slim app
// -------------------------
$app = AppFactory::create();
// Configurer Error Middleware selon l'environnement
// Error middleware
$errorMiddleware = $app->addErrorMiddleware($isDebug, $isDebug, $isDebug);
// Optionnel : personnaliser le rendu d'erreur en production pour éviter fuite d'info
if (!$isDebug) {
$errorHandler = $errorMiddleware->getDefaultErrorHandler();
$errorHandler->registerErrorRenderer('text/html', function () {
// message générique sans trace
// Renderer générique en production
$errorHandler->registerErrorRenderer('text/html', function (Throwable $exception, bool $displayErrorDetails) {
return '<html><head><meta charset="utf-8"><title>Erreur</title></head><body><h1>Erreur serveur</h1><p>Une erreur est survenue. Veuillez réessayer plus tard.</p></body></html>';
});
}
@@ -103,7 +121,8 @@ if (!$isDebug) {
$app->addBodyParsingMiddleware();
$app->add(TwigMiddleware::create($app, $container['view']));
// Charger routes (web.php reçoit maintenant le container)
// Charger routes (web.php reçoit le container)
(require __DIR__ . '/../src/Routes/web.php')($app, $container);
// Lancer l'app
$app->run();