2. Le contrôleur 🎛️⚓︎
Rappel sur les contrôleurs
Un contrôleur est l'élément central d'une fonctionnalité sur un site MVC. Chaque fonctionnalité est gérée par un contrôleur qui :
- Récupère les données transmises par un formulaire (GET/POST)
- Appelle les fonctions du modèle pour lire ou écrire en base de données
- Traite les données (logique applicative)
- Appelle la vue pour afficher le résultat à l'utilisateur
1. Contrôleur de connexion : connexion.php 🔐⚓︎
Documents à utiliser : fichiers du projet, annexes 1, 2, 3, 4
Annexe 1 - section de test du fichier modèle authentification.inc.php 📄
if ($_SERVER["SCRIPT_FILENAME"] == __FILE__) {
// prog principal de test
header('Content-Type:text/plain');
// test de connexion
if (isLoggedOn()) {
echo "logged\n";
} else {
echo "not logged\n";
}
login("test@bts.sio", "sio"); // login de test : test@bts.sio
// mot de passe de test : sio
if (isLoggedOn()) {
echo "logged\n";
} else {
echo "not logged\n";
}
$mail=getMailULoggedOn();
echo "utilisateur connecté avec cette adresse : $mail \n";
// deconnexion
logout();
}
Annexe 2 - résultat d'exécution du script authentification.inc.php 📄
not logged
logged
utilisateur connecté avec cette adresse : test@bts.sio
Annexe 3 - vueAuthentification.php 📄
<h1>Connexion</h1>
<form action="./?action=connexion" method="POST">
<input type="text" name="mailU" placeholder="Email de connexion" /><br />
<input type="password" name="mdpU" placeholder="Mot de passe" /><br />
<input type="submit" />
</form>
<br />
<a href="./?action=inscription">Inscription</a>
Annexe 4 - contrôleur connexion.php à compléter 📄
<?php
if ( $_SERVER["SCRIPT_FILENAME"] == __FILE__ ){
$racine="..";
}
include_once "$racine/modele/authentification.inc.php";
// creation du menu burger
$menuBurger = array();
$menuBurger[] = Array("url"=>"./?action=connexion","label"=>"Connexion");
$menuBurger[] = Array("url"=>"./?action=inscription","label"=>"Inscription");
// recuperation des donnees GET, POST, et SESSION
if (!isset($_POST["mailU"]) || !isset($_POST["mdpU"])){
// on affiche le formulaire de connexion
$titre = "authentification";
include "$racine/vue/entete.html.php";
include "$racine/vue/vueAuthentification.php";
include "$racine/vue/pied.html.php";
}
else
{
// à completer
}
?>
Contexte⚓︎
Le contrôleur de connexion gère deux cas :
Cas 1 — Affichage du formulaire L'utilisateur clique sur "Connexion" dans le menu. Le contrôleur est appelé sans paramètre → il affiche le formulaire de connexion.
Cas 2 — Traitement du formulaire L'utilisateur a saisi son login et mot de passe et validé le formulaire. Le contrôleur reçoit ces données → il tente la connexion.
Contrôleur connexion.php
│
├─ [Pas de paramètre] ──────────────────► vue : vueAuthentification.php
│ (affiche le formulaire)
│
└─ [login + mdp transmis]
│
├─ [connexion OK] ────────────► vue : vueConfirmationAuth.php
│
└─ [connexion KO] ────────────► vue : vueAuthentification.php
(formulaire affiché de nouveau)
Deux scripts modèle sont utilisés :
authentification.inc.phpbd.utilisateur.inc.php
Observation du modèle d'authentification (annexes 1 et 2) 👓
La section de test du fichier authentification.inc.php :
<?php
if ($_SERVER["SCRIPT_FILENAME"] == __FILE__) {
header('Content-Type:text/plain');
if (isLoggedOn()) {
echo "logged\n";
} else {
echo "not logged\n";
}
login("test@bts.sio", "sio");
if (isLoggedOn()) {
echo "logged\n";
} else {
echo "not logged\n";
}
$mail = getMailULoggedOn();
// ...
}
❓ Premier appel à isLoggedOn() 🔎
Lors du 1er appel à isLoggedOn(), l'utilisateur est-il connecté ?
Éléments de réponses ✅
Non. Au premier appel à isLoggedOn(), aucune connexion n'a encore eu lieu. La fonction retourne false, l'utilisateur n'est pas connecté.
❓ Deuxième appel à isLoggedOn() 🔎
Lors du 2ème appel à isLoggedOn() (après l'appel à login()), l'utilisateur est-il connecté ?
Éléments de réponses ✅
Oui. Après l'appel à login("test@bts.sio", "sio"), l'utilisateur est connecté. La fonction isLoggedOn() retourne true.
❓ Quelle fonction permet la connexion de l'utilisateur ? Donner sa définition (signature/prototype).🎯
Éléments de réponses ✅
Il s'agit de la fonction login().
Prototype :
fonction login(utilisateur : chaîne, motDePasse : chaîne) : booléen
En PHP :
login($mailU, $mdpU);
❓ Décrivez le rôle de chacune des fonctions du modèle. ⚙️
| Fonction | Rôle |
|---|---|
login($mail, $mdp) |
|
isLoggedOn() |
|
getMailULoggedOn() |
|
logout() |
Éléments de réponses ✅
| Fonction | Rôle |
|---|---|
login($mail, $mdp) |
Connecte l'utilisateur dont le mail et le mot de passe sont passés en paramètre. |
isLoggedOn() |
Retourne true si un utilisateur est connecté, false sinon. |
getMailULoggedOn() |
Retourne l'adresse mail de l'utilisateur actuellement connecté (son identifiant). |
logout() |
Déconnecte l'utilisateur actuellement connecté. |
❓ Schéma d'authentification 🗺️
À l'aide des annexes 2 et 3, compléter le schéma ci-dessous :

Annexe 2 - résultat d'exécution du script authentification.inc.php 📄
not logged
logged
utilisateur connecté avec cette adresse : test@bts.sio
Annexe 3 - vueAuthentification.php 📄
<h1>Connexion</h1>
<form action="./?action=connexion" method="POST">
<input type="text" name="mailU" placeholder="Email de connexion" /><br />
<input type="password" name="mdpU" placeholder="Mot de passe" /><br />
<input type="submit" />
</form>
<br />
<a href="./?action=inscription">Inscription</a>
Éléments de réponses ✅

❓ Compléter le contrôleur connexion.php ✏️
En vous inspirant de la section de test du modèle, compléter le code du contrôleur en respectant les étapes suivantes :
<?php
// Étape 1 : inclure les modèles nécessaires
include_once "$racine/modele/authentification.inc.php";
include_once "$racine/modele/bd.utilisateur.inc.php";
// Étape 2 : récupérer les données POST si elles existent
if (/* condition : des données sont transmises */) {
// Récupérer login et mot de passe depuis $_POST
$mail = /* à compléter */;
$mdp = /* à compléter */;
// Tenter la connexion
/* à compléter */;
// Tester si la connexion a réussi
if (/* à compléter */) {
// Afficher la confirmation
include "$racine/vue/entete.html.php";
include "$racine/vue/vueConfirmationAuth.php";
include "$racine/vue/pied.html.php";
} else {
// Afficher le formulaire à nouveau
include "$racine/vue/entete.html.php";
include "$racine/vue/vueAuthentification.php";
include "$racine/vue/pied.html.php";
}
} else {
// Étape déjà faite : afficher le formulaire de connexion
include "$racine/vue/entete.html.php";
include "$racine/vue/vueAuthentification.php";
include "$racine/vue/pied.html.php";
}
?>
Éléments de réponses ✅
<?php
if ($_SERVER["SCRIPT_FILENAME"] == __FILE__) {
$racine = "..";
}
include_once "$racine/modele/authentification.inc.php";
// recuperation des donnees GET, POST, et SESSION
if (!isset($_POST["mailU"]) || !isset($_POST["mdpU"])) {
// Pas de données → afficher le formulaire
$titre = "authentification";
include "$racine/vue/entete.html.php";
include "$racine/vue/vueAuthentification.php";
include "$racine/vue/pied.html.php";
} else {
$mailU = $_POST["mailU"];
$mdpU = $_POST["mdpU"];
login($mailU, $mdpU);
if (isLoggedOn()) {
// Connexion réussie
$titre = "confirmation";
include "$racine/vue/entete.html.php";
include "$racine/vue/vueConfirmationAuth.php";
include "$racine/vue/pied.html.php";
} else {
// Échec : réafficher le formulaire
$titre = "authentification";
include "$racine/vue/entete.html.php";
include "$racine/vue/vueAuthentification.php";
include "$racine/vue/pied.html.php";
}
}
?>
2. Contrôleur de déconnexion : deconnexion.php 🚪⚓︎
Documents à utiliser : fichiers du projet, annexes 1, 2 et 5
Annexe 1 - section de test du fichier modèle authentification.inc.php 📄
if ($_SERVER["SCRIPT_FILENAME"] == __FILE__) {
// prog principal de test
header('Content-Type:text/plain');
// test de connexion
if (isLoggedOn()) {
echo "logged\n";
} else {
echo "not logged\n";
}
login("test@bts.sio", "sio"); // login de test : test@bts.sio
// mot de passe de test : sio
if (isLoggedOn()) {
echo "logged\n";
} else {
echo "not logged\n";
}
$mail=getMailULoggedOn();
echo "utilisateur connecté avec cette adresse : $mail \n";
// deconnexion
logout();
}
Annexe 2 - résultat d'exécution du script authentification.inc.php 📄
not logged
logged
utilisateur connecté avec cette adresse : test@bts.sio
Annexe 5 - contrôleur deconnexion.php à compléter 📄
<?php
if ( $_SERVER["SCRIPT_FILENAME"] == __FILE__ ){
$racine="..";
}
include_once "$racine/modele/authentification.inc.php";
// recuperation des donnees GET, POST, et SESSION
// appel des fonctions permettant de recuperer les donnees utiles a l'affichage
// traitement si necessaire des donnees recuperees
// appel du script de vue qui permet de gerer l'affichage des donnees
$titre = "Deconnexion";
include "$racine/vue/entete.html.php";
include "$racine/vue/pied.html.php";
?>
❓ Quelle fonction du modèle permet de déconnecter l'utilisateur actuellement connecté ? 🎯
Éléments de réponses ✅
C'est la fonction logout(). Elle ne prend aucun paramètre.
❓ Vue de confirmation 🖼️ : Quelle vue permettant de confirmer la déconnexion devra être appelée par ce contrôleur ?
Éléments de réponses ✅
C'est le script vueDeconnexion.php (ou vueAuthentification.php selon la version du projet).
❓ Donnée à transmettre📨 : Lors de la déconnexion, est-il utile de transmettre une donnée au contrôleur ?
Éléments de réponses ✅
Non. Aucune donnée n'est nécessaire. La fonction logout() ne prend pas de paramètre : elle déconnecte l'utilisateur actuellement en session, sans avoir besoin d'identifiant.
🔨 Compléter deconnexion.php ✏️
Compléter le code du contrôleur. Il doit :
- Appeler la fonction appropriée du modèle
- Afficher un message de confirmation
<?php
include_once "$racine/modele/authentification.inc.php";
// Déconnecter l'utilisateur
/* à compléter */;
// Afficher la confirmation
include "$racine/vue/entete.html.php";
include "$racine/vue//* à compléter */";
include "$racine/vue/pied.html.php";
?>
Éléments de réponses ✅
<?php
if ($_SERVER["SCRIPT_FILENAME"] == __FILE__) {
$racine = "..";
}
include_once "$racine/modele/authentification.inc.php";
// Déconnecter l'utilisateur
logout();
// Afficher la confirmation
$titre = "authentification";
include "$racine/vue/entete.html.php";
include "$racine/vue/vueAuthentification.php";
include "$racine/vue/pied.html.php";
?>
3. Contrôleur de recherche : rechercheResto.php 🔍⚓︎
Documents à utiliser : fichiers du projet, annexes 6, 7, 8 et 9
Annexe 6 - contrôleur rechercheResto.php à compléter 📄
<?php
if ($_SERVER["SCRIPT_FILENAME"] == __FILE__) {
$racine = "..";
}
include_once "$racine/modele/bd.resto.inc.php";
// creation du menu burger
$menuBurger = array();
$menuBurger[] = Array("url" => "./?action=recherche&critere=nom", "label" => "Recherche par nom");
$menuBurger[] = Array("url" => "./?action=recherche&critere=adresse", "label" => "Recherche par adresse");
// critere de recherche par defaut
$critere = "nom";
if (isset($_GET["critere"])) {
$critere = $_GET["critere"];
}
// recuperation des donnees GET, POST, et SESSION
// recherche par nom
$nomR = "";
// recherche par adresse
$voieAdrR = "";
$cpR = "";
$villeR = "";
// appel des fonctions permettant de recuperer les donnees utiles a l'affichage
// Si on provient du formulaire de recherche : $critere indique le type de recherche à effectuer
if (!empty($_POST)) {
switch ($critere) {
case 'nom':
// recherche par nom
break;
case 'adresse':
// recherche par adresse
break;
}
}
// traitement si necessaire des donnees recuperees
;
// appel du script de vue qui permet de gerer l'affichage des donnees
$titre = "Recherche d'un restaurant";
include "$racine/vue/entete.html.php";
include "$racine/vue/vueRechercheResto.php";
include "$racine/vue/pied.html.php";
?>
Annexe 7 - vue vueRechercheResto.php 📄
<h1>Recherche d'un restaurant</h1>
<form action="./?action=recherche&critere=<?= $critere ?>" method="POST">
<?php
switch ($critere) {
case "nom":
?>
Recherche par nom : <br />
<input type="text" name="nomR" placeholder="nom" value="<?= $nomR ?>" /><br />
<?php
break;
case "adresse":
?>
Recherche par adresse : <br />
<input type="text" name="villeR" placeholder="ville" value="<?= $villeR ?>"/><br />
<input type="text" name="cpR" placeholder="code postal" value="<?= $cpR ?>"/><br />
<input type="text" name="voieAdrR" placeholder="rue" value="<?= $voieAdrR ?>"/><br />
<?php
break;
}
?>
<br /><br />
<input type="submit" value="Rechercher" />
</form>
Annexe 8 - vue vueResultRecherche.php 📄
<h1>Liste des restaurants</h1>
<?php
for ($i = 0; $i < count($listeRestos); $i++) {
?>
<div class="card">
<div class="descrCard"><?php echo "<a href='./?action=detail&idR=" . $listeRestos[$i]['idR'] . "'>" . $listeRestos[$i]['nomR'] . "</a>"; ?>
<br />
<?= $listeRestos[$i]["numAdrR"] ?>
<?= $listeRestos[$i]["voieAdrR"] ?>
<br />
<?= $listeRestos[$i]["cpR"] ?>
<?= $listeRestos[$i]["villeR"] ?>
</div>
<div class="tagCard">
<ul id="tagFood">
</ul>
</div>
</div>
<?php
}
?>
Annexe 9 - extrait du modèle bd.resto.inc.php 📄
<?php
include_once "bd.inc.php";
function getRestoByIdR($idR) {...}
function getRestosByNomR($nomR) {...}
function getRestosByAdresse($voieAdrR, $cpR, $villeR) {...}
if ($_SERVER["SCRIPT_FILENAME"] == __FILE__) {
// prog principal de test
header('Content-Type:text/plain');
echo "getRestos() : \n";
print_r(getRestos());
echo "getRestoByIdR(idR) : \n";
print_r(getRestoByIdR(1));
echo "getRestosByNomR(nomR) : \n";
print_r(getRestosByNomR("charcut"));
echo "getRestosByAdresse(voieAdrR, cpR, villeR) : \n";
print_r(getRestosByAdresse("Ravel", "33000", "Bordeaux"));
}
?>
Contexte⚓︎
Le contrôleur rechercheResto.php gère deux situations :
- Affichage du formulaire de recherche (
vueRechercheResto.php) - Exécution de la recherche et affichage des résultats (
vueResultRecherche.php)
La vue vueResultRecherche.php affiche la variable $listeRestos.
❓ En consultant bd.resto.inc.php, donner la signature de chacune de ces fonctions ⚙️
Signature d'une fonction
Une signature de fonction définit les entrées et sorties des fonctions et des méthodes, nom des variables ainsi que leurs types.
| Fonction | Signature complète |
|---|---|
getRestos() |
|
getRestosByNomR($nomR) |
|
getRestosByAdresse($voie, $cp, $ville) |
Éléments de réponses ✅
| Fonction | Signature |
|---|---|
getRestos() |
fonction getRestos() : tableau |
getRestosByNomR($nomR) |
fonction getRestosByNomR(nomR : chaîne) : tableau |
getRestosByAdresse($voie, $cp, $ville) |
fonction getRestosByAdresse(voieAdrR : chaîne, cpR : chaîne, villeR : chaîne) : tableau |
❓ Afficher le contenu de $_POST dans le contrôleur avec print_r($_POST) 📨
Quelle est sa valeur dans les deux cas suivants :
| Situation | Contenu de $_POST |
|---|---|
| Recherche par nom | |
| Recherche par adresse (ex: "rue saint rémi 33000 bordeaux") |
Éléments de réponses ✅
Recherche par nom (ex: "entrepote") :
Array (
[nomR] => entrepote
)
Recherche par adresse (rue saint remi 33000 bordeaux) :
Array (
[voieAdrR] => rue saint remi
[cpR] => 33000
[villeR] => bordeaux
)
❓ Quels sont les noms des variables transmises au contrôleur en méthode POST lors d'une recherche ? 📋
Éléments de réponses ✅
Les variables suivantes sont transmises en méthode POST : nomR, voieAdrR, cpR et villeR.
Elles correspondent aux champs des deux formulaires de recherche (par nom et par adresse).
🔨 Compléter la section de récupération des données POST pour valoriser $nomR, $voieAdrR, $cpR et $villeR 📥
// Initialisation par défaut
$nomR = "";
$voieAdrR = "";
$cpR = "";
$villeR = "";
// Récupération conditionnelle (exemple pour $nomR)
if (isset($_POST['nomR'])) {
$nomR = $_POST['nomR'];
}
// À compléter pour les autres variables :
/* ... */
Éléments de réponses ✅
$nomR = "";
if (isset($_POST["nomR"])) {
$nomR = $_POST["nomR"];
}
$voieAdrR = "";
if (isset($_POST["voieAdrR"])) {
$voieAdrR = $_POST["voieAdrR"];
}
$cpR = "";
if (isset($_POST["cpR"])) {
$cpR = $_POST["cpR"];
}
$villeR = "";
if (isset($_POST["villeR"])) {
$villeR = $_POST["villeR"];
}
🔨 Compléter le code de chaque cas en faisant appel à la fonction appropriée du modèle. Les données récupérées doivent être placées dans $listeRestos. ✏️
if (!empty($_POST)) {
$typeRecherche = $_POST['typeRecherche'] ?? '';
switch ($typeRecherche) {
case 'nom':
$listeRestos = /* à compléter */;
break;
case 'adresse':
$listeRestos = /* à compléter */;
break;
default:
$listeRestos = getRestos();
}
}
Éléments de réponses ✅
switch ($critere) {
case 'nom':
$listeRestos = getRestosByNomR($nomR);
break;
case 'adresse':
$listeRestos = getRestosByAdresse($voieAdrR, $cpR, $villeR);
break;
}
❓ Pourquoi l'appel aux fonctions du modèle est-il conditionné par!empty($_POST) ? 🤔
Éléments de réponses ✅
On ne peut pas effectuer de recherche si aucune donnée n'est transmise par le formulaire. Si $_POST est vide, c'est que l'utilisateur n'a pas encore soumis de formulaire : on affiche simplement le formulaire vide, sans lancer de requête en base de données.
🔨 Ajouter l'appel à la vue de résultats🖼️ : La vue vueResultRecherche.php ne doit être affichée que si des données ont été trouvées. Ajouter son inclusion en fin de contrôleur.
// En fin de contrôleur
include "$racine/vue/entete.html.php";
// Toujours afficher le formulaire de recherche
include "$racine/vue/vueRechercheResto.php";
// Afficher les résultats uniquement si une recherche a été faite
if (/* condition à compléter */) {
include "$racine/vue/vueResultRecherche.php";
}
include "$racine/vue/pied.html.php";
Éléments de réponses ✅
$titre = "Recherche d'un restaurant";
include "$racine/vue/entete.html.php";
include "$racine/vue/vueRechercheResto.php";
if (!empty($_POST)) {
// Afficher les résultats uniquement si une recherche a été soumise
include "$racine/vue/vueResultRecherche.php";
}
include "$racine/vue/pied.html.php";
4. Analyse de rechercheResto.php : gestion de l'affichage 🔍⚓︎
Documents à utiliser : fichiers du projet, annexes 6, 7 et 8
Annexe 6 - contrôleur rechercheResto.php à compléter 📄
<?php
if ($_SERVER["SCRIPT_FILENAME"] == __FILE__) {
$racine = "..";
}
include_once "$racine/modele/bd.resto.inc.php";
// creation du menu burger
$menuBurger = array();
$menuBurger[] = Array("url" => "./?action=recherche&critere=nom", "label" => "Recherche par nom");
$menuBurger[] = Array("url" => "./?action=recherche&critere=adresse", "label" => "Recherche par adresse");
// critere de recherche par defaut
$critere = "nom";
if (isset($_GET["critere"])) {
$critere = $_GET["critere"];
}
// recuperation des donnees GET, POST, et SESSION
// recherche par nom
$nomR = "";
// recherche par adresse
$voieAdrR = "";
$cpR = "";
$villeR = "";
// appel des fonctions permettant de recuperer les donnees utiles a l'affichage
// Si on provient du formulaire de recherche : $critere indique le type de recherche à effectuer
if (!empty($_POST)) {
switch ($critere) {
case 'nom':
// recherche par nom
break;
case 'adresse':
// recherche par adresse
break;
}
}
// traitement si necessaire des donnees recuperees
;
// appel du script de vue qui permet de gerer l'affichage des donnees
$titre = "Recherche d'un restaurant";
include "$racine/vue/entete.html.php";
include "$racine/vue/vueRechercheResto.php";
include "$racine/vue/pied.html.php";
?>
Annexe 7 - vue vueRechercheResto.php 📄
<h1>Recherche d'un restaurant</h1>
<form action="./?action=recherche&critere=<?= $critere ?>" method="POST">
<?php
switch ($critere) {
case "nom":
?>
Recherche par nom : <br />
<input type="text" name="nomR" placeholder="nom" value="<?= $nomR ?>" /><br />
<?php
break;
case "adresse":
?>
Recherche par adresse : <br />
<input type="text" name="villeR" placeholder="ville" value="<?= $villeR ?>"/><br />
<input type="text" name="cpR" placeholder="code postal" value="<?= $cpR ?>"/><br />
<input type="text" name="voieAdrR" placeholder="rue" value="<?= $voieAdrR ?>"/><br />
<?php
break;
}
?>
<br /><br />
<input type="submit" value="Rechercher" />
</form>
Annexe 8 - vue vueResultRecherche.php 📄
<h1>Liste des restaurants</h1>
<?php
for ($i = 0; $i < count($listeRestos); $i++) {
?>
<div class="card">
<div class="descrCard"><?php echo "<a href='./?action=detail&idR=" . $listeRestos[$i]['idR'] . "'>" . $listeRestos[$i]['nomR'] . "</a>"; ?>
<br />
<?= $listeRestos[$i]["numAdrR"] ?>
<?= $listeRestos[$i]["voieAdrR"] ?>
<br />
<?= $listeRestos[$i]["cpR"] ?>
<?= $listeRestos[$i]["villeR"] ?>
</div>
<div class="tagCard">
<ul id="tagFood">
</ul>
</div>
</div>
<?php
}
?>
❓ Dans le code source de vueRechercheResto.php, **quelle variable permet de choisir l'affichage du formulaire de recherche par nom ou par adresse ** ? 🔎
Éléments de réponses ✅
C'est la variable $critere. Selon sa valeur ('nom' ou 'adresse'), la vue affiche le bon formulaire de recherche.
❓ Quelle variable transmise en méthode GET au contrôleur permet de connaître le type de recherche souhaité ? 📨
Éléments de réponses ✅
C'est la variable critere (sans $, car on parle de la variable transmise dans l'URL en méthode GET). Elle est récupérée dans le contrôleur via $_GET["critere"].
❓ Rechercher où est faite cette transmission : quel script ? quelle ligne ? 🗺️
Éléments de réponses ✅
La transmission se fait dans le champ action du formulaire de recherche dans vueRechercheResto.php :
<form action="./?action=recherche&critere=<?= $critere ?>" method="POST">
$critere est ainsi ajoutée à l'URL en méthode GET à chaque soumission du formulaire.
❓ Sans cette transmission 🤔
- Sans cette information, le contrôleur pourrait-il savoir quelle recherche effectuer ?
- Sans cette information, la vue pourrait-elle savoir quel formulaire afficher ?
Éléments de réponses ✅
4.4 — Le contrôleur : Oui, en théorie on pourrait analyser le contenu des variables transmises en POST (si $nomR n'est pas vide → recherche par nom, sinon → recherche par adresse). Mais cette approche est moins fiable et moins lisible.
4.5 — La vue : Non. La vue ne pourrait pas savoir quel formulaire afficher si la variable $critere n'est pas transmise. Il faut toujours afficher le bon formulaire (par nom ou par adresse), même quand aucune donnée POST n'est présente.
❓ Lorsqu'une recherche est effectuée, la vue affiche à nouveau le formulaire avec des valeurs pré-remplies. Quelles variables sont alors utilisées ? 📋
Éléments de réponses ✅
Les variables $nomR, $voieAdrR, $cpR et $villeR sont utilisées pour pré-remplir les champs de recherche. Elles ont été valorisées dans le contrôleur à partir de $_POST, et la vue les utilise comme valeurs par défaut des champs <input>.
5. Synthèse — Rôle et fonctionnement du contrôleur 📌⚓︎
Le contrôleur est l'élément central des fonctionnalités d'une application MVC. Il permet de :
| Rôle | Description |
|---|---|
| Récupérer les actions utilisateur | Données GET, POST (saisies, choix, sélections) |
| Interroger le modèle | Appel aux fonctions pour lire ou écrire en base |
| Traiter les données | Logique applicative, calculs, validations |
| Commander l'affichage | Appel aux vues avec les données préparées |
Schéma du fonctionnement de rechercheResto.php (recherche par nom)⚓︎

Règles d'organisation⚓︎
- Les fonctions du modèle sont accessibles grâce à
include_onceen début de contrôleur - Les vues sont incluses en fin de contrôleur, une fois toute la logique applicative traitée