BRE03

Le MVC en PHP

Les contenus du cours BRE03 Web Dev Course © 2024 par Mari Doucet sont sous licence CC BY-NC-SA 4.0

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.

Déroulement de l’appel à une page en MVC

Le fonctionnement typique de l’appel d’une page en MVC est donc le suivant :

  1. Votre utilisateur demande à son navigateur la page de votre site : http://example.com/index.php?route=login
  2. Votre index.phpreçoit la requête et instancie votre class Router
  3. Votre index.php transmet la requête à votre Router
  4. Le Router vérifie si la route login existe, et instancie le controlleur approprié (LoginController)
  5. Le Router appelle la méthode appropriée du controlleur : LoginController::login()
  6. La méthode login prépare le nom du template à charger et appelle layout.phtml
  7. layout.phtml appelle le template login.phtml
  8. Votre utilisateur voit sa page s’afficher

gif principe mvc

Les Models

Une classe Model est une classe qui représente une des tables de votre base de données. Chaque instance d’un Model correspond à une ligne de la table correspondante.

Exemple

Prenons l’exemple d’une classe qui représente un utilisateur :

class User 
{
    private ? int $id = null;

    public function __construct(private string $email, private string $password){}

    public function getId() : ? int 
    {
        return $this->id;
    }

    public function setId(int $id) : void 
    {
        $this->id = $id;
    }

    public function getEmail() : string 
    {
        return $this->email;
    }

    public function setEmail(string $email) : void 
    {
        $this->email = $email;
    }

    //...
}

Les Managers

Un Manager est une classe qui va faire l’interface entre l’un de vos Model et la base de données. On considère généralement qu’il y a un Manager par Model. Certains frameworks (dont Symfony) appellent les managers des Repository.

Par défaut un managers doit permettre d’effectuer 5 actions et donc contenir 5 méthodes :

Elle peut en contenir d’autres, si vous avez des requêtes que vous avez systématiquement besoin d’effectuer, par exemple trouver tous les Models selon un critère autre que l’id.

Les Views

Les views ce sont vos templates, donc vos fichiers .phtml.

La structure de base de votre page avec les inclusions de vos CSS et JS se fait dans un fichier layout.phtml qui lui-même appellera les bons templates en fonction de ce dont votre page a besoin.

Si vous avez deux interfaces différentes : par exemple un site et son interface d’administration, vous aurez deux layouts différents ci-besoin.

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 :

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.

Les Services

Un Service est une classe qui remplit une fonction précise et peut avoir besoin d’être appelée par plusieurs Controllers différents.

Par exemple : une classe qui se charge d’envoyer des mails, ou une classe qui se charge d’uploader des fichiers.

Structure de base des fichiers d’un projet MVC

- assets
    - styles
        - css
        - scss
    - js
- config
    - Router.php
    - autoload.php
- controllers
- models
- services
- templates
    - layout.phtml
- index.php

À partir de ce point du cours, tous vos projets seront contenus dans des classes, vous devez donc utiliser des fichiers .php au lieu de .class.php pour écrire vos classes.

Le fichier autoload.php vous sert à faire un require de toutes vos classes, vous pouvez ensuite require ce fichier en haut de votre index.php et vos classes seront toujours disponibles.

Une fois que votre projet est en MVC, tous les require utilisent le chemin depuis l’index.php parce qu’il devient votre unique point d’entrée (le seul fichier que vous allez run)

Exercice de création d’un routing MVC

Consignes de l’exercice ici

Exercice sur la gestion du CRUD en MVC

Consignes de l’exercice ici