Php Data le model MVC
Maintenant que vous avez les bases en PHP POO, nous allons pouvoir aborder un sujet très important en PHP et pour le développement d'application web : le design pattern MVC !
Avant toute chose, qu'est-ce qu'un design pattern ? C'est ce qu'on appelle un patron de conception, ou en d'autres termes, cela défini une méthode pour procéder à un développement. Plus simplement, c'est un schéma de construction d'application que vous devez suivre.
Il existe plusieurs design pattern en PHP, nous allons nous intéresser de prêt au MVC et légèrement au singleton pour le moment.
Pour informations, le MVC est utilisé par plusieurs frameworks pour application web tels que Symfony, Lavarel, Ruby on Rails, Angulaire Js etc...
Pour le cours, nous allons mettre en place une petite application web qui va ressembler à Indeed, nous allons mettre en avant des annonces de postes.
MVC définition
MVC est un acronyme pour définir Model Vue Controller, ce design pattern est destiner à scinder votre développement en 3 grands pôles de fichiers/dossiers :
Les models :
Dans ces fichiers, vous mettrez vos objets (classes), ce sont les fichiers qui représenteront vos tables ainsi que les fichiers qui vont communiquer avec la base de données.
Les vues :
Dans ces fichiers, vous allez mettre toute la partie interface graphique de votre application (vos pages), en HTML avec un peu de PHP pour faire de l'affichage dynamique, mais pas de script.
Les controllers :
Contient la logique concernant les actions à effectuer pour chaque page.
Pour apprendre ce model MVC, nous allons développer ensemble une petite application web qui va reprendre tous les concepts du module MVC.
La base de données
Avant de se lancer dans notre futur application web, nous allons devoir créer notre base de données et surtout gérer la connexion en base de notre application web à notre BDD.
Pour ça nous allons utiliser le SGBD Mysql ainsi que PHPMyAdmin pour avoir une interface graphique de gestion de nos données.
Vous avez un certains fichiers de configuration Docker pour builder votre environnement avec un serveur PHP, Mysql et PHPMyAdmin, vous avez simplement à builder l'environnement avec la commande docker-compose up -d
Vous verrez que dans le dossier app, vous avez déjà 2 fichiers, c'est un autoloader, que nous avons vu lors de la partie introduction, ainsi qu'un fichier index.php qui pour le moment, n'appelle que l'autoloader.
Le Design pattern Singleton
Pour mettre en place la connexion en BDD, nous allons créer une classe, cette classe aura pour but de gérer la connexion ainsi que les interactions en BDD. Pour cette classe, nous allons utiliser le design pattern singleton, ce design pattern à pour but de créer une classe qui n'aura qu'une seule instance, c'est à dire qu'on ne pourra pas créer de 2ème instance de cette classe.
Créez un dossier Db dans lequel vous allez créer un fichier Db.php, ce sera notre classe Db.
Dans ce fichier, nous allons utiliser PDO pour la connexion en base de données (n'oubliez pas la définition du namespace de notre classe ainsi que les uses) :
<?php
namespace App\Db;
// On importe PDO
use PDO;
// On import les exceptions PDO
use PDOException;
class Db extends PDO
{
}Maintenant, nous allons devoir suivre le design pattern singleton en rendant notre classe "unique", nous allons créer une première propriété qui sera en privée et static, cette propriété sera notre seule et unique instance de la classe Db.
Ensuite, nous allons devoir stocker les informations de connexion à la base de données, pour les stocker, nous allons utiliser des constantes privées :
// Instance unique de la classe
private static $instance;
// Information de connexion en BDD
private const DBHOST = 'db_php_POO_MVC';
private const DBUSER = 'root';
private const DBPASS = 'root';
private const DBNAME = "demo_mvc";
À partir de maintenant, nous avons toutes les informations de connexion à notre base de données, nous pouvons commencer à créer notre constructeur, il va avoir comme informations le dsn (data Source Name ou grossièrement, l'url de notre base de données) de connexion, ainsi qu'appeler le constructeur de la classe PDO, rappelez vous que nous avons étendu de la classe PDO, donc on appelle le constructeur de la classe PDO en lui passant les informations de connexion en base :
Rappel, quand on utilise PDO, le mieux est de créer une structure avec un try pour gérer les potentielles erreur de connexion en BDD, donc nous allons avoir la structure suivante :
public function __construct()
{
// DSN de connexion
$dsn = 'mysql:dbname=' . self::DBNAME . ';host=' . self::DBHOST;
// On appelle le constructeur de la classe PDO
try {
parent::__construct($dsn, self::DBUSER, self::DBPASS);
} catch (PDOException $e) {
die($e->getMessage());
}
}Ici, nous venons de faire notre structure de connexion en Base de données avec un Try, maintenant, nous allons définir les paramètres PDO :
Nous venons de finaliser le constructeur, mais pour le moment,…
Besoin de plus de conseils, Contacter moi.