06. Architecture des Contrôleurs (MVC)
Le passage d’un code procédural (script par script) à une architecture par Contrôleurs est la clé d’une application évolutive.
1. Définition et Rôle
Un Contrôleur est une classe dont le rôle est de faire le lien entre l’utilisateur et le système.
- Il reçoit la requête (via les paramètres GET/POST).
- Il demande aux modèles de récupérer ou modifier les données.
- Il décide quelle vue afficher grâce au
Renderer.
2. Analyse d’une méthode de contrôleur type
Prenons l’exemple de la suppression d’un article :
public function delete(int $id): void {
// 1. Sécurité : Vérifie si l'utilisateur est admin
checkAdmin();
// 2. Récupération : Demande au Modèle de trouver l'article
$article = Article::find($id);
// 3. Validation : Si l'article n'existe pas, on redirige vers une erreur
if (!$article) {
Http::redirect("error.php?message=Article introuvable");
}
// 4. Action : Exécute la suppression en base de données
$article->delete();
// 5. Feedback : Enregistre un message de succès en session
$_SESSION['success']['delete'] = "Article supprimé.";
// 6. Réponse : Redirige l'utilisateur vers la liste
Http::redirect('admin-list-article.php');
}
Pourquoi cette structure ?
- Lisibilité : Le déroulement de l’action est clair et linéaire.
- Réutilisation : On peut appeler cette logique de suppression depuis une interface web, mais aussi plus tard depuis une API ou une commande terminal.
- Découplage : La logique n’est pas “mélangée” au code HTML. On peut modifier le design de la page sans risquer de casser la suppression.
3. Avantages de la centralisation
Auparavant, la logique de gestion des articles était éparpillée dans :
admin-add-article.phpadmin-delete-article.phpadmin-update-article.php
Désormais, tout est dans ArticleController.php.
Avantage direct : Si vous voulez changer la manière dont les images sont stockées, vous ne modifiez qu’un seul fichier au lieu de trois.
4. Comparaison avec Laravel
Notre architecture a été pensée pour être “Laravel-ready”. Voici les équivalences :
| Notre Blog | Framework Laravel | Pourquoi c’est identique ? |
|---|---|---|
App\Controllers |
App\Http\Controllers |
Même logique de centralisation des actions. |
App\Models |
App\Models |
Même utilisation de classes pour représenter la base de données. |
Renderer::render() |
view() |
Séparation totale entre les données et le template HTML. |
Http::redirect() |
redirect() |
Abstraction des headers HTTP pour plus de sécurité. |
L’avantage pour vous
En apprenant à structurer votre blog ainsi, vous faites 80% du chemin pour maîtriser Laravel. La seule différence majeure est que Laravel automatise encore plus de choses (comme le routing que nous verrons en Phase 7).
5. Interaction avec le Renderer et Http
Le contrôleur ne fait plus d’ include ni d’ header(). Il utilise nos services :
Renderer::render(): Équivalent à la fonctionview()de Laravel.Http::redirect(): Équivalent au helperredirect()de Laravel.
Cela permet de garder le contrôleur “propre” et facile à tester, car il ne dépend pas directement des fonctions natives complexes de PHP.
Prêt à passer à la suite ?
Vous avez terminé cette leçon sur 06. Architecture des Contrôleurs (MVC). Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.