13.Zend Framework 2 et 3

13.6.Modèle MVC

13.6.1.Introduction

Au fil des années, les sites web se sont enrichis, ils se sont étoffés pour devenir de véritables applications. Rapidement, il n'a plus été possible de raisonnablement gérer chacune des requêtes reçues par un site web via un simple script "autonome" comme ce pouvait être le cas avec le "Model 1". Il a donc fallu penser à une autre organisation... le Model 2, plus connu sous le nom de MVC pour Modèle Vue Controleur (Model View Controller dans le texte) a donc été préconisé.
Objectif principal, comme son nom l'indique, différencier les différents éléments d'un application web. Pour faire simple nous dirons que l'on a:
  • Le modèle qui va définir les données
  • La vue qui va s'occuper de l'affichage des données
  • Le contrôleur qui va s'assurer du traitement des données
Dans les paragraphes suivants, après une rapide présentation de l'aspect modèle, nous présenterons l'aspect contrôleur (déjà évoqué dans le chapitre précédent où nous avons vu la problématique du routage[c'est quoi?]) et nous finirons par la vue.

13.6.2.MVC: Le modèle

Désolé, le modèle, c'est la partie la moins intéressante de l'architecture MVC. Le modèle, c'est simplement l'ensemble des données. Elles seront représentées par des classes clairement identifiées.
Dans le modèle, on pourra donc retrouver des classes comme:
  • Une classe Utilisateur qui pourra contenir des variables membres (avec éventuellement des accesseurs) contenant le nom, le prénom, etc.
  • Une classe Facture qui pourra contenir des variables membres (avec éventuellement des accesseurs) contenant des objets Client, Article avec des prix, des quantités, etc.
  • etc.
Autrement dit, tout ce dont votre application aura besoin pour travailler.
Un élément du modèle aura donc un code semblable à :
<?php
namespace PHPFacile\Model;

class Utilisateur
{
    protected $nom;

    public function setNom($nom)
    {
        $this->nom = $nom;
    }

    public function getNom()
    {
        return $this->nom;
    }

}
Ces éléments pourront être traités par le contrôleur pour être stockés ou lus (par exemple dans une base de données).
rem
  • Libre à vous de choisir l'espace de nom de votre application (dans l'exemple nous avons choisi PHPFacile). Nous avons également choisi de regrouper les modèles dans un dossier et espace de nom Model. Nous avons donc choisi un espace de nom complet PHPFacile\Model.
Si vous respectez l'arborescence proposée par le squelette d'application Zend, pour un projet baptisé PHPFacile, vous aurez une arborescence semblable à:
  • config (pour la configuration liée à la personnalisation de l'application)
  • module
    • PHPFacile
      • config
        • module.config.php (pour la configuration framework du module, ex: le routage)
      • src
        • Controller (pour les aspects Contrôleur)
        • Model (pour les aspects Modèle)
      • view (pour les aspects Vue)
  • config (pour la configuration liée à la personnalisation de l'application)
  • module
    • PHPFacile
      • config
        • module.config.php (pour la configuration du framework, ex: le routage)
      • src
        • PHPFacile
          • Controller (pour les aspects Contrôleur)
          • Model (pour les aspects Modèle)
      • view (pour les aspects Vue)