Cours de Rémi JarjatCours de Rémi Jarjat
  • Liste des cours
  • Culture numérique
  • Git
    • Terminologie
    • Avant de commencer
    • Créer un dépôt (local)
    • Enregistrer des changements
    • Des branches
    • Mise en commun du travail
    • Annuler des changements
    • Réécrire l'historique
    • Des outils pour se simplifier Git
    • Exercices
    • Exemples pratiques
  • Linux
    • Installation
    • Historique
    • Rangement des fichiers
    • Les processus
    • Commandes de base
    • Commandes avancées
    • /linux/6-other-technologies.html
    • Exercices
    • Correction des exercices
  • PHP
    • Environnement de travail
    • Bases du PHP
    • Tests et boucles
    • Procédures et fonctions
    • Interagir avec l'utilisateur
    • La temporisation de sortie
    • PHP Doc et PSR
    • PHP Orienté objet
    • Héritage et objets
    • Factorisation
    • Manipuler la BdD avec PDO (PHP Data Object)
    • Architecture MVC
    • Webservices REST
    • Exercices - Bases
    • Exercices - Séparer en plusieurs fichiers
    • Exercices - POST et SESSION
    • Exercices - Panier et validation
    • Exercices - Objets
    • Exercices - BdD avec PDO
    • Projet - montage d'ordinateurs
    • Projet - Personnages de Jeux de Rôle
  • Symfony
    • Installer Symfony et son environnement de travail
    • Structure et utilisation d'un projet
    • Le routing
    • Les controllers
    • Twig
    • Les services et l'injection de dépendances
    • Doctrine et la BdD
    • Formulaires
    • Les traductions
    • Event listeners/subscribers
    • Connexion et sécurisation
    • Bundles
    • Easy Admin Bundle
    • API Platform
    • Pense-bêtes
    • Symfony au quotidien
    • Travailler avec Docker
    • Projet : annonces de SPA / éleveurs
    • Exercices
  • Javascript
    • Les bases du langage
    • Manipulation logique
    • Le DOM
    • JQuery
    • Ajax
    • Programmation orientée objet
    • Webpack
    • Outils utiles
    • Révisions
  • Serveur Lamp
  • Déploiement
    • Des outils et manières de faire
    • Déploiement par FTP
    • Wordpress
    • Intégrer Git dans le processus
    • GitHub Pages pour déployer facilement
    • Symfony et Angular
  • Docker
  • Intégration continue
  • Sécurité informatique

Architecture MVC

  • Principes
  • Mise en place dans un projet

L'article Wikipédia sur le MVC

Principes

Le modèle MVC (Modèle Vue Contrôleur) est une manière de ranger et concevoir le code pour le séparer autant que possible en 3 éléments distincts :

  • Le modèle, c'est-à-dire les éléments liés aux données (les classes liées à nos tables de BdD par exemple)
  • Les vues, c'est-à-dire les fichiers purement dédiés à l'affichage (contenu d'une page)
  • Les contrôleurs, c'est-à-dire un ensemble de fichiers "chefs d'orchestre" qui vont recevoir la requête de l'utilisateur et appeler le modèle et la vue, pour construire la réponse finale.

Schéma présentant le modèle MVC

Détails du schéma (honteusement piqué sur Wikipédia 😉 ) :

  1. L'utilisateur envoie une requête HTTP (demande une URL), qui va être reçue par un contrôleur
  2. Le contrôleur va demander des données au modèle (généralement, la BdD)
  3. Le contrôleur reçoit les données, fait d'éventuels calculs avec
  4. Le contrôleur transmet les données à la vue, qui va les exploiter pour créer l'affichage
  5. Cet affichage est renvoyé à l'utilisateur qui avait fait la requête HTTP (une réponse HTTP est renvoyée)

Ce découpage facilite la maintenabilité du code, force une séparation entre les éléments et permet divers rangements pour retrouver plus efficacement les fichiers.

Mise en place dans un projet

Pour plus d'exemples et de détails, je vous conseille le tuto dédié au MVC sur Open ClassRoom

Concrètement, dans la plupart des projets, vous pouvez utiliser des frameworks (comme Symfony) pour le mettre en place. Dans un premier temps, nous allons voir comment organiser du code Php procédural, pour passer en mode MVC.

La plupart du temps, nous allons nous baser sur des objets et des classes pour organiser tout ça. Voici un exemple de structure minimale pour un projet MVC :

- src/
| - Controller/
| - Model/
| - View/
- index.php

Pour ajouter une page dans cette structure, nous aurions besoin d'ajouter un fichier dans chacun des dossiers Controller, Model et View. Prenons l'exemple d'un site référençant toutes les races de chien et des informations sur chacune.

Pour ajouter une page listant les listes de chiens, il nous faudrait :

  • Une table breed (race) dans notre BdD et une entité Breed correspondante
  • Une vue list-breeds.php pour afficher le contenu de la liste des races de chiens
  • Un controller ListBreedController pour gérer l'appel aux données et à l'affichage de la liste
- src/
| - Controller/
| | - ListBreedController.php
| - Model/
| | - Breed.php
| - View/
| | - list-breeds.php
- index.php

Dans ListBreedController, on peut s'attendre à un appel à la BdD pour récupérer les différentes races Breed et un appel à la vue list-breeds.

Bien sûr, pour que tout ça fonctionne, il faut que notre front controller (index.php) reçoive la requête et puisse faire le lien entre ce qu'il reçoit et un contrôleur.

Dernières mise à jour :
Prev
Manipuler la BdD avec PDO (PHP Data Object)
Next
Webservices REST