Par Valentin Brosseau / @c4software
Votre site grandit : 2, 3, 10 pages…
Question : où corrigez-vous un bug présent sur toutes les pages ?
Vous le connaissez déjà : include() insère un fichier dans un autre.
Jusqu'ici, chaque page incluait le header et le footer.
Et si on inversait la logique ?
Toutes les demandes passent par un seul fichier : index.php.
index.php?page=home
index.php?page=bart
C'est lui qui inclut la bonne page, au bon moment. C'est un routeur.
Une seule fois, pour tout le site :
session_start()).<?php
session_start();
include('common/header.php');
$whitelist = array('home', 'bart');
if(isset($_GET['page']) && in_array($_GET['page'], $whitelist)) {
include("pages/" . $_GET['page'] . '.php');
} else {
include('pages/home.php');
}
include('common/footer.php');Aucun HTML : l'entry-point est générique.
Question : pourquoi ne pas écrire directement include($_GET['page']) ?
Imaginez un visiteur qui demande :
index.php?page=../../config
Sans whitelist, il inclut ce qu'il veut. Avec : uniquement ce que vous avez autorisé.
common/ : header, footer, fonctions… le partagé.pages/ : une page = un fichier.public/ : CSS, images, fonts… ce qui part au navigateur.index.php : l'entry-point, à la racine.Avant : <a href="bart.php">
Maintenant : <a href="index.php?page=bart">
Question : que se passe-t-il si la page demandée n'existe pas dans la whitelist ?
WordPress, Laravel, Symfony… tous les CMS et frameworks modernes reposent sur un entry-point unique.
Aujourd'hui vous l'écrivez à la main. Demain, le framework le fera pour vous. Mais vous saurez ce qu'il fait.
?page= choisit la page.common/, pages/, public/ : chaque chose à sa place.Place au TP 🚀