Le modèle MVC permet de définir des couches de composants pour des applications nécessitants un accès à des SGBD et une présentation à des utilisateurs.

MVC signifie Modèle-vue-contrôleur

 

On sépare le code en trois parties.

Le modèle contiendra le code permettant d’accéder aux SGBD. Toutes requêtes SQL ou équivalent doit donc être dans le modèle.
La vue contiendra les pages qui seront affichées à l’utilisateur. Aucune page des autres modules ne devra s’afficher.
Le contrôleur sert d’aiguillage. Il reçoit la demande de l’utilisateur, appelle le modèle si nécessaire et appelle la vue à transmettre au client.

Quand on réalise une application avec l’architecture MVC, il faut que toutes demandes de l’utilisateur passent par le contrôleur. Aucun affichage ne sera généré par le contrôleur ou le modèle.

Exemple d’architecture MVC

Le contrôleur

c_monControleur.php

<?php session_start();

if (isset($_REQUEST["maVar"])) {
    $maVar = $_REQUEST["maVar "];

    switch ($maVar) {

        case "maPage1":
            require_once "../vues/v_maVue1.php";
            break;
        case "maPage2":
            require_once "../modeles/m_monModele1.php";
//insertion d"une liste de fonctions de m_monModele
            $mesClients = listeClients();
//valorisation de la variable $mesClients grâce à une fonction
            require_once "../vue/v_maVue2.php";
//utilisation de $mesClients dans la vue
            break;

    }
} else {
    require_once "../vue/v_acceuil.php";
}

 

Le modèle

m_monModele1.php
Le modèle contient plusieurs fonctions

<?php
function connexion()
{
    $dsn = "pgsql:host=192.168.1.14;port=5432;dbname=maBase";
    try {
        return $dbh = new PDO($dsn, " root  ", "  ");
    } catch (PDOException $e) {
    }
}

function listeClients()
{
    $connexion = connexion();
    $sql = " SELECT nom, prenom FROM client ";
    $statement = $connexion->query("$sql") or die(print_r($connexion->errorInfo(), true));
    $array = array();
    foreach ($statement->fetchAll(PDO::FETCH_OBJ) as $ligne) {
        array_push($array, $ligne);
    }
    $statement->closeCursor();
    return $array;
} 

 

La vue

v_maVue2.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>mon titre</title>
</head>
<body>
<?php
print("<select name=’maListe’ size=’1’>");
foreach ($mesClients as $client){
    print("<option>". $client->prenom ."</option>");
}
print("</select>");
?>
</body>
</html>

On réutilise la variable du modèle passée au contrôleur, accessible à la vue grâce aux inclusions de pages PHP

v_acceuil.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>mon titre</title>
</head>

<body>
<form method="post" id="frmConnection" action="recuperation.php?maVar=maPage2">
    <label for="email"> Votre email:</label>
    <input type="email" name="txtEmail" id="txtEmail" autofocus />
    </br>
    <label for=" txtPass "> Mot de passe :</label>
    <input type="password" name="txtPass" required />
    <input type="submit" name="cmd" id="cmd" value=" envoie " />
</form>
</body>
</html>