Bonjour,

je dispose d'un code basé sur le MVC (issu d'une personne très calée), mais j'ai des problèmes basiques de compréhension : j'ai 3 classes "model", "view" et "controller", un index.php qui crée un objet "controller" et dans le constructeur de celui-ci la création de 2 objets "view" et "model".

Pour plus de clarté, voici le code de la classe "controller" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
session_start();
class controller{
private $model; // 2 attributs pour pointer sur les 2 autres classes.
private $view;
 
public function __construct() {
 
/* création du modèle et de la vue ; la vue doit connaître aussi le modèle */
$this->model=new model();
$this->view=new view($this->model);
 
/* l'action est positionnée soit par GET (see_doc), soit par POST (formulaires) */
$action="";
if (isset($_GET['action'])) $action=$_GET['action'];
if (isset($_POST['action'])) $action=$_POST['action'];
if (!isset($_SESSION['Account'])) $action="connect"; // Si pas connecté, l'action est forcée à "connect"
$res_updateM=$this->updateModel($action);
$this->showView($action,$res_updateM);
 
}
 
public function updateModel($action) {
switch($action) {
	case "insert":$res=$this->model->insertOperation(new Operation($_POST['DateISO'],$_POST['intitule'],$_POST['montant'],NULL,$_POST['id']));break;
	case "remove" : $res=$this->model->removeOperation(array_keys($_POST['suppr'])) ; break;
	case "update": $res=$this->model->updateOperation(new Operation($_POST['DateISO'],$_POST['intitule'],$_POST['montant'],NULL,$_POST['id']));break;
	case "connect" : $res=(isset($_POST['login']))&&($this->model->actionFormConnect($_POST['login'],$_POST['pwd'])); break;
	default : $res=true; break;
}
return($res); // true si OK, false sinon
}
 
public function showView($action, $res_updateM) {
switch($action) {
  case "see_doc" : $vue="doc"; break;
  case "insert" : 
  case "update" :
  case "remove" : if ($res_updateM) $vue="list"; else $vue="err"; break;
  case "connect" : if ($res_updateM) $vue="list"; else $vue="authentif"; break;
  default :$vue="list"; break;
}
$this->view->show($vue); // affichage des différentes vues (formulaires ou msg d'erreur)
 
}
}
Les 3 classes disposent chacune de plusieurs méthodes. Celles de "view" et "model" sont appelées par les 2 de la classe "controller", ces deux-là étant lancées par le constructeur du "controller", qui est appelé par index.php : $c=new controller();.
Visiblement les méthodes de "view" et de "model" sont tout le temps disponibles pour l'utilisateur et ce que je ne comprends pas, c'est que ces méthodes ne sont appelées qu'une seule fois, à la création du controller : peut-on m'expliquer ?