Cours : MVC, Routing et Controllers
- Les notions du jour
Présentation du MVC
Controllers
Views
Router
Qu'est-ce que le MVC ?
Le MVC (Model View Controller) est un design pattern, une architecture de code particulièrement adaptée au web.
Le MVC repose sur la stricte séparation entre les pages (View), les données (Models) et la logique (Controller).
Utilisé avec la POO, le MVC permet un code propre bien organisé, souple et plus facile à maintenir et faire évoluer.
Les règles d'or du MVC
La séparation des pouvoirs
Pour implémenter le MVC vous devez rigoureusement séparer :
Les Views : pas de code HTML / CSS / appel à JS en dehors d'un template
La logique : pas de logique en dehors d'un Controller
Les Données : vos données sont représentées par des Models et interrogées par des Managers
Le Routing
Une route (une URL) === Une méthode de Controller
Déroulement de l'appel à une page en MVC
Le fonctionnement typique de l'appel d'une page en MVC est donc le suivant :
Votre utilisateur demande à son navigateur la page de votre site : http://example.com/index.php?route=login
Votre
index.phpreçoit la requête et instancie votre classRouterVotre
index.phptransmet la requête à votreRouterLe
Routervérifie si la routeloginexiste, et instancie le controlleur approprié (LoginController)Le
Routerappelle la méthode appropriée du controlleur :LoginController::login()La méthode
loginprépare le nom du template à charger et appellelayout.phtmllayout.phtmlappelle le templatelogin.phtmlVotre utilisateur voit sa page s'afficher
Les Controllers
Vos Controllers contiennent toute la logique de votre site.
En MVC, une route = une méthode de Controller.
Un Controller va généralement correspondre à une fonctionnalité.
Par exemple :
?route=loginet?route=registercorrespondront aux méthodesAuthController::login()etAuthController::register()respectivement.?route=list-userset?route=show-useraux méthodesUserController::list()etUserController::show()respectivement....
Une méthode de Controller prépare les données pour l'affichage (en appelant un Manager par exemple), précise au layout le template qui devra être appelé et traite les formulaires quand ils ont été soumis.
Le Routeur
Le Router est une classe donc le rôle est de faire correspondre les routes dans les URLs (?route=bidule) à la bonne méthode de Controller.
Si aucune méthode ne correspond, la route n'existe pas et il doit appeler une méthode de Controller qui affichera une page 404.