Mettre en place un architecture MVC avec PHP
Le Modèle MVC
Le modèle MVC pour : Model - View - Controller est un Design Pattern visant à séparer une application en trois modules :
- Modèle : les données
- Controlleur : traite les données et mets à jours la vue
- Vue : Définit l'interface utilisateur

Si on applique au modèle du Web cela donne le schéma suivant :
MCV en PHP Vanilla
Commeçons par créer une arborescence de dossiers pour ranger nos scripts en fonction des différents modules de MVC :
- Un dossier
model
: contient des scripts qui contiennent des fonctions de requêtes SQL ainsi qu'un script de connexion à la base de donnée. - Un Dossier
view
: va contenir des fichier.tpl
qui à partir desquels seront générées des pages HTML. - Un dossier
controller
: contient des scripts qui vont faire appel aux fonctions dumodel
afin de récupèrer des données, les traiter, puis faire appel à la vue correspondante.
et un fichier index.php
pour le routage.
Le routage
Pour accèder aux service des controleurs on va passer dans chaque requêtes une variable controller
et une variable action
en paramètre d'URL. Exemple : http://localhost/index.html&controller=user&action=login
.
Si bien qu'on fera toujours appel à index.html
, qui lui s'occupera d'appeler la bonne action du bon controleur.
Le code qui s'en occupe est le suivant :
if (isset ( $_GET ['controller'] ) & isset ( $_GET ['action'] )) {
$controle = $_GET ['controller'];
$action = $_GET ['action'];
} else { // absence de paramètres : prévoir des valeurs par défaut
$controle = "user";
$action = "login";
}
// Inclure le fichier php de contrôle
// Et lancer la fonction-action issue de ce fichier.
require ('./controller/' . $controle . '.php');
$action ();
Connexion à la base de donnée
On va créer un script de connexion à la base de donnée connectDb
dans le dossier model
et on y écrit la fonction suivante :
function connect(){
$hostname = "localhost";
$base = "nom de la base de donnée";
$loginBD = "root";
$passBD = "mot de passe de la base de donnée";
try {
$bdd = new PDO ( "mysql:server=$hostname; dbname=$base", "$loginBD", "$passBD", array (PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
return $bdd;
}
catch ( PDOException $e ) {
echo "Echec de connexion à la base de donnée";
die ( "Echec de connexion : " . $e->getMessage () . "\n" );
}
}
```
No Comments