Un site Web type a trois types de fonctionnalités: le code implémentant la logique applicative, le code implémentant l'interaction avec l'utilisateur et le code de rendu HTML (présentation). Avant les frameworks PHP, les développeurs fusionnaient généralement ces trois types de code dans un gros fichier PHP, ce qui était pénible à tester et à maintenir, en particulier avec des sites volumineux.
Mais depuis cette sombre époque, PHP est devenu un langage orienté objet, vous pouvez maintenant organiser votre code en classes. Le modèle MVC (Model-View-Controller) est simplement un ensemble de règles vous indiquant comment organiser vos classes, pour les rendre faciles à maintenir.
En MVC, les classes implémentant la logique métier sont appelées des modèles, les extraits de code permetant le rendu des pages HTML sont appelés des vues et les classes chargées d'interagir avec l'utilisateur sont appelées des contrôleurs.
Les vues sont implémentée en tant qu'extraits de code et non en tant que classes. En effet, les vues sont généralement très simples et ne contiennent que des balises HTML mélangées aux données PHP (déjà traitées) à afficher.
L'objectif principal du concept MVC est de séparer la logique métier (modèles) de l'affichage (vues). Ceci est également appelé la séparation des préoccupations, lorsque chaque couche ne fait que ses tâches spécifiques.
En séparant les modèles des vues, vous réduisez le nombre de dépendances entre elles. Par conséquent, les modifications apportées à l'une des couches a le moins d'impact possible sur les autres couches. Cette séparation améliore également la réutilisabilité du code . Par exemple, vous pouvez créer plusieurs vues pour les mêmes modèles (thèmes modifiables).
Pour mieux comprendre comment cela fonctionne, rappelons qu'un site web est un programme PHP recevant une requête HTTP d'un serveur web, et produisant une réponse HTTP. La figure 4.2 montre comment une requête HTTP est traitée par l'application MVC et comment la réponse est générée:
Tout d'abord, un internaute saisi une URL dans son navigateur, par exemple http://localhost, son navigateur envoie alors une demande au serveur web.
Le moteur PHP du serveur web exécute le script de base index.php. La seule chose que ce script fait est de créer
une instance de la classe Zend\Mvc\Application
.
L'Application utilise alors son composant router pour analyser l'URL et déterminer à quel contrôleur transmettre la requête. Si une correspondance de route est trouvée, le contrôleur est instancié et la méthode Action demandée est appelée.
Dans la méthode Action du contrôleur, les paramètres (données entrantes) sont extraits des variables GET et POST. Pour traiter les données entrantes, le contrôleur instancie les classes des modèles nécessaires et appelle leurs méthodes.
Les classes de modèle utilisent des algorithmes de logique métier pour traiter les données d'entrée et renvoyer les données de sortie. Les algorithmes de logique applicative sont spécifiques à l'application et incluent généralement la récupération des données issues de la base de données, la gestion des fichiers, l'interaction avec des systèmes externes, etc.
Le résultat de l'appel des modèles est transmis à la vue qui correspond à la méthode Action.
La vue utilise les données fournies par le modèle pour effectuer le rendu de la page HTML.
Le contrôleur transmet la réponse HTTP qui résulte des étapes précédentes.
Le serveur renvoie la page demandée sous forme de code HTML au navigateur de l'internaute.
L'internaute voit la page s'afficher dans son navigateur.
Vous avez maintenant une idée de la façon dont les modèles, les vues et les contrôleurs coopèrent pour générer du code HTML. Dans les sections suivantes, nous les décrivons plus en détails.