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 du model 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" );

 }

}

```