Académique Documents
Professionnel Documents
Culture Documents
fr
Accueil / Tous les articles / 7 - Live Coding : PHP Orienté Objet - Le MVC
Série
Benoit
Partager
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 1/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
Nous allons parler d'un autre Design Pattern et d'une architecture qu'est le MVC.
Il s'agit surtout de la structure que nous donnerons à notre projet pour séparer clairement ses principaux composants.
En utilisant une structure MVC, nous allons séparer les accès à la base de données de notre code HTML et de toute "l'intelligence" de
l'application.
Les Modèles
Les modèles seront les éléments et classes qui se chargeront de tous les échanges avec la base de données (CRUD). C'est le seul endroit de
notre projet qui contiendra du SQL.
Les vues
Les vues contiendront uniquement le code HTML destiné à structurer les pages.
Les contrôleurs
Les contrôleurs, contiendront toute l'intelligence de l'application, le traitement des données en vue de leur affichage, par exemple.
Le routeur
Dans la structure MVC, un seul et unique fichier est le point d'entrée de l'application, quelle que soit la page affichée. Il est systématiquement
appelé, et envoie la demande au bon contrôleur. Il est chargé de trouver le bon chemin pour que l'utilisateur récupère la bonne page, d'où le
nom de routeur.
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 2/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
Structure du projet
Controllers : contiendra, comme son nom l'indique, les contrôleurs, dont le nom commencera par une majuscule, par convention.
Core : ce dossier contiendra le coeur de l'application
Models : contiendra nos modèles, leur nom commencera également par une majuscule
public : Contiendra tous les fichiers accessibles au "public" par le navigateur
Views : contiendra nos fichiers de vues, dans des dossiers, un dossier par contrôleur.
Autoloader.php : notre classe de chargement automatique des fichiers
Le routeur
Le routeur est notre point d'entrée dans l'application. Nous allons le placer dans le dossier "Core" sous le nom "Main.php".
Il sera appelé par un fichier unique placé dans "public" et appelé "index.php"
Avant d'entrer dans le vif du sujet sur le contenu de ces fichiers, attardons nous sur la structure des URLs.
Pour ce premier routeur, nous allons faire simple. Nous allons mettre le nom du contrôleur et la méthode souhaitée en paramètres d'URL.
https://mes-annonces.test/controleur/methode
Cependant, notre serveur ne contiendra pas les dossiers correspondants, il nous faudra utiliser une technique de réécriture d'URL pour
parvenir à nos fins.
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 4/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
Le fichier .htaccess
C'est là que le fichier .htaccess entre en jeu.
Il va nous servir à réécrire notre URL à la volée pour la transformer, de façon invisible en cette url
https://mes-annonces.test/index.php?p=controleur/methode
En insérant ces deux lignes dans notre fichier .htaccess, que nous placerons dans "public"
RewriteEngine On
RewriteRule ^([a-zA-Z0-9\-\_\/]*)$ index.php?p=$1
Le fichier index.php
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 5/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
Dans notre fichier index.php, nous allons uniquement charger l'autoloader (vu dans la partie autoload) et instancier notre classe "Main" puis
démarrer l'application.
// On importe l'Autoloader
require_once ROOT.'/Autoloader.php';
Autoloader::register();
// On instancie Main
$app = new Main();
// On démarre l'application
$app->start();
La classe Main
Véritable coeur de l'application, la classe Main nous permet de router les demandes vers les différents contrôleurs.
Nous devons récupérer les paramètres d'URL (p=controleur/méthode), vérifier si ils existent et enfin charger le contrôleur et la méthode
concernés.
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 6/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
Tout d'abord, nous créons la classe, son namespace et la méthode "start" utilisée dans index.php
namespace App\Core;
class Main
{
public function start()
{
}
}
Nous commencerons par retirer l'éventuel "trailing slash" (/ à la fin de l'url) pour simplifier le traitement des paramètres.
En effet, "/controleur/methode/" donnera 3 paramètres où "/controleur/methode" en donnera 2, et ça nous permet également d'éviter le
"Duplicate Content"
// On récupère l'adresse
$uri = $_SERVER['REQUEST_URI'];
Nous allons ensuite séparer les paramètres de l'URL dans un tableau pour effectuer le traitement, vérifier si ils existent et instancier le bon
contrôleur puis appeler la bonne méthode.
// On instancie le contrôleur
$controller = new $controller();
if(method_exists($controller, $action)){
// Si il reste des paramètres, on appelle la méthode en envoyant les paramètres sinon on l'appelle "à
vide"
(isset($params[0])) ? $controller->$action($params) : $controller->$action();
}else{
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 8/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
Voilà notre routeur prêt à fonctionner. Il faudra, bien sûr, ajouter des contrôles d'erreur et des remontées de pages 404, par exemple.
La classe Db
Vue dans la partie sur la base de données, notre classe Db permettra de nous connecter à la base de données. Nous allons reprendre le même
code et modifier uniquement le namespace.
namespace App\Core;
// On "importe" PDO
use PDO;
use PDOException;
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 9/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
// Informations de connexion
private const DBHOST = 'localhost';
private const DBUSER = 'root';
private const DBPASS = '';
private const DBNAME = 'demo_poo';
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 10/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
Les contrôleurs
Ce sont les tours de contrôle de notre application web, les contrôleurs vont contenir tout le code de traitement de nos pages. Ils seront
séparés en fonction du type de contenu qu'ils auront à gérer, par exemple "AnnoncesController" pour les annonces, "UsersController" pour
les utilisateurs...
Le contrôleur principal
Le contrôleur principal sera une classe abstraite qui contiendra les méthodes communes à tous les contrôleurs de notre application. Nous y
reviendrons à plusieurs reprises pour y ajouter de nouvelles méthodes.
Pour le moment, nous allons uniquement y écrire son namespace et sa classe. Créons le fichier "Controller.php" dans "Controllers"
namespace App\Controllers;
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 11/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
namespace App\Controllers;
Le contrôleur "Annonces"
Pour afficher nos annonces, nous allons créer un contrôleur spécifique qui permettra de gérer les différents cas de figure (une annonce, une
catégorie...). Nous l'appellerons "AnnoncesController" et nous le placerons dans le dossier "Controllers".
Pour le moment, nous n'allons rien ajouter mis à part une méthode "index" qui affichera un texte.
namespace App\Controllers;
Les modèles
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 12/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
Les modèles sont les fichiers du MVC qui nous servent à intéragir avec la base de données. L'un d'entre eux, le modèle principal, traité dans la
partie précédente, permet d'exécuter les requêtes les plus courantes.
Le modèle principal
Comme indiqué, ce fichier "Model.php" est la pierre angulaire de la gestion de la base de données. Il permet de mettre en place les requêtes
principales qui seront utilisées par les "sous modèles"
Nous reprenons le fichier de la partie "Base de données" en modifiant son namespace et l'importation de la classe Db
<?php
namespace App\Models;
use App\Core\Db;
// Instance de Db
private $db;
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 13/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
// On exécute la requête
return $this->requete('SELECT * FROM '.$this->table.' WHERE '. $liste_champs, $valeurs)->fetchAll();
}
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 14/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
$valeurs = [];
// On exécute la requête
return $this->requete('INSERT INTO '.$this->table.' ('. $liste_champs.')VALUES('.$liste_inter.')',
$valeurs);
}
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 15/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
// On exécute la requête
return $this->requete('UPDATE '.$this->table.' SET '. $liste_champs.' WHERE id = ?', $valeurs);
}
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 16/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
$query->execute($attributs);
return $query;
}else{
// Requête simple
return $this->db->query($sql);
}
}
Le modèle "Annonces"
Nous allons également reprendre le modèle appelé "AnnoncesModel" qui permet de gérer la table "annonces"
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 17/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
namespace App\Models;
/**
* Get the value of id
*/
public function getId()
{
return $this->id;
}
/**
* Set the value of id
*
* @return self
*/
public function setId($id)
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 18/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
{
$this->id = $id;
return $this;
}
/**
* Get the value of titre
*/
public function getTitre()
{
return $this->titre;
}
/**
* Set the value of titre
*
* @return self
*/
public function setTitre($titre)
{
$this->titre = $titre;
return $this;
}
/**
* Get the value of description
*/
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 19/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
/**
* Set the value of description
*
* @return self
*/
public function setDescription($description)
{
$this->description = $description;
return $this;
}
/**
* Get the value of created_at
*/
public function getCreated_at()
{
return $this->created_at;
}
/**
* Set the value of created_at
*
* @return self
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 20/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
*/
public function setCreated_at($created_at)
{
$this->created_at = $created_at;
return $this;
}
/**
* Get the value of actif
*/
public function getActif()
{
return $this->actif;
}
/**
* Set the value of actif
*
* @return self
*/
public function setActif($actif)
{
$this->actif = $actif;
return $this;
}
}
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 21/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
Les vues
Dans le dossier "Views", nous appliquerons une convention qui nous permettra d'identifier rapidement le lien entre le contrôleur et la vue.
En effet, nous créerons un dossier pour chaque contrôleur puis à l'intérieur un fichier pour chaque méthode.
Nous aurons donc, par exemple, un dossier "annonces" pour le contrôleur "AnnoncesController" et un fichier "index.php" pour la méthode
"index".
Obtenir de l'aide
Pour obtenir de l'aide, vous pouvez accéder au serveur Discord pour une entraide par chat
CGU Equipe
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 22/23
21/06/2023 16:41 7 - Live Coding : PHP Orienté Objet - Le MVC - Nouvelle-Techno.fr - Nouvelle-Techno.fr
https://nouvelle-techno.fr/articles/live-coding-php-oriente-objet-le-mvc 23/23