Tp 7 php framework mvc blogpoo
Thème :
Junior
1 vues ·2/12 leçons

01 — Le Front Controller : public/index.php

Définition

Un Front Controller est un unique point d’entrée pour toutes les requêtes HTTP d’une application web. Au lieu d’avoir un fichier PHP par page (login.php, admin.php, etc.), une seule page reçoit tout et décide quoi faire.

🔗 Comparaison Laravel

Dans Laravel, le Front Controller est public/index.php. Il est identique dans son rôle au nôtre. C’est d’ailleurs une des conventions les plus importantes du framework.

Notre blog Laravel
public/index.php public/index.php
chdir(dirname(__DIR__)) Utilise __DIR__ pour localiser bootstrap/app.php
require_once 'app/helpers.php' require __DIR__.'/../vendor/autoload.php'
$router->resolve() $app->handleRequest(Request::capture())

📄 Notre fichier public/index.php

<?php

declare(strict_types=1);

session_start();

// On change le répertoire de travail vers la racine du projet
chdir(dirname(__DIR__));

// Permet de servir les fichiers statiques (CSS, Images)
$uri = urldecode(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
if ($uri !== '/' && file_exists(__DIR__ . '/..' . $uri)) {
    return false;
}

require_once 'app/helpers.php';

// Chargement des routes
$router = require_once 'routes/web.php';

// Résolution de la route
$router->resolve();

Analyse ligne par ligne

1. session_start()

Démarre la session PHP. Doit être appelé avant tout affichage HTML et avant toute logique.

En Laravel, la gestion de session est automatique grâce au middleware StartSession.

2. chdir(dirname(__DIR__))

Change le répertoire de travail courant pour la racine du projet (le dossier parent de public/). Sans cette ligne, tous les require_once 'app/...' échoueraient car PHP chercherait dans public/.

3. Détection des fichiers statiques

if ($uri !== '/' && file_exists(__DIR__ . '/..' . $uri)) {
    return false;
}

Si la requête pointe vers un fichier qui existe physiquement (ex: /resources/css/blog.css), on retourne false pour laisser le serveur PHP intégré le servir directement.

En Laravel, les assets sont dans public/ et n’ont pas besoin de cette vérification.

4. require_once 'routes/web.php'

Charge le fichier de définition des routes. Ce fichier retourne l’instance du routeur configuré.

5. $router->resolve()

Lance la résolution de la route : analyse l’URL, trouve le contrôleur correspondant et l’exécute.

🛡️ Sécurité

Le fait d’utiliser public/ comme racine web signifie que les dossiers app/, database/, resources/, .env ne sont jamais accessibles directement via le navigateur. C’est la sécurité fondamentale du pattern Front Controller.

Prêt à passer à la suite ?

Vous avez terminé cette leçon sur 01 — Le Front Controller : `public/index.php`. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.