Le contrôleur n’est pas toute l’application.
Représente les données et les règles métier. Il ne décide pas de la couleur d’un bouton.
Présente des informations. Elle ne devrait pas effectuer une requête SQL.
Reçoit le cas d’utilisation, appelle ce qui est nécessaire et choisit la réponse.
Exemple : afficher un produit.
'GET /products/{id}' => [ProductController::class, 'show']public function show(Request $request): Response
{
$product = $this->products->find((int) $request->attribute('id'));
if ($product === null) {
return Response::html('<h1>Not found</h1>', 404);
}
return $this->view('products/show.php', ['product' => $product]);
}La route connaît l’adresse et l’action. Le contrôleur transforme l’identifiant, demande le produit au dépôt, traite l’absence puis choisit une vue. La vue reçoit déjà le produit à afficher.
Reconnaître une responsabilité mal placée.
SQL dans une vueLa vue connaît alors le stockage et devient difficile à tester.
HTML dans un modèleLe modèle ne peut plus servir une API ou une autre présentation.
Tout dans le contrôleurLes règles métier deviennent longues, dupliquées et difficiles à réutiliser.
VÉRIFIEZ VOTRE COMPRÉHENSION
Qui doit vérifier qu’une remise commerciale est autorisée : la vue ou le domaine métier ?
Afficher la réponse
Le domaine métier, généralement dans un modèle ou un service. La vue se contente de présenter le résultat.
EN RÉSUMÉ
Ce qu’il faut retenir
- Le modèle porte données et règles métier.
- La vue présente.
- Le contrôleur coordonne.
- Une bonne séparation permet de réutiliser la même logique en HTML ou JSON.