Salut,
j'ai implémenté récemment un projet php objet en utilisant le model mvc.
Pour implémenter le model MVC je me suis basée sur un exemple que j'ai trouvée quelque part sur internet (je me rappel pas bien ou ). Cependant j'ai des soucis est ce que le principe est correcte , je m'explique:
Le principe que j'ai suivi est comme ça :
dans la racine de mon projet , je crée 3 dossiers controller (un seul fichier qui appelle les méthodes du model) , model (contient les classes et une classe model qui contient des requêtes sql) et view (pour les pages) et le fichier index.php .
Dans le fichier index je déclare une instance de la classe controller et je fais des tests pour savoir quelle méthode du controller appeler:
index.php
dans le controller on appelle les classes et fait le traitement métier, puis appel la page voulu si nécessaire, par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $controller = new Controller(); if(isset($_GET['p'])){ $controller->appelerPlante(); }elseif(isset($_GET['consul'])){ $controller->afficherConsultation($_GET['consul']); } //....
controller.php
la classe model dans le dossier model, contient les requêtes qu'on appel dans le cotroler:
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
47
48 include_once("model/Model.php"); class Controller{ public $plante; public $maladie; public $definition; public $introduction; public $consultation; public $utilisateur; public $discussion; public $medicament; public function __construct(){ $this->plante = new Model(); $this->maladie = new Model(); $this->definition=new Model(); $this->consultation=new Model(); $this->utilisateur=new Model(); $this->introduction=new Model(); $this->discussion=new Model(); $this->medicament=new Model(); } public function appelerMaladie(){ $mld = $this->maladie->Listmaladie(); include 'view/Listmaladie.php'; } public function appelerConsultation() { if ((isset($_SESSION['utilisateur'])) && (!empty($_SESSION['utilisateur']))){ $su=$_SESSION['utilisateur']; $u=unserialize($su); if($u->getAdmin()==1) $cns = $this->consultation->ListConsultation(); else $cns = $this->consultation->ListConsultationU($u->getId()); include 'view/ListConsultation.php'; } else { $_SESSION['page']="index.php?con=1"; include 'view/login.php'; } } //...
model.php
le reste des classes dans le dossier model, sont des classes simples contenant les attributs et les getters et setters
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 include_once("model/Maladie.php"); include_once("model/Plante.php"); include_once("model/Definition.php"); include_once("model/Introduction.php"); include_once("model/Discussion.php"); include_once("model/Consultation.php"); include_once("model/Utilisateur.php"); include_once("model/connexion.php"); include_once("model/Medicament.php"); class Model { public function Listmaladie() { $data= array(); $requete ="select * from maladie"; $resultat = mysql_query($requete); while($ligne=mysql_fetch_array($resultat)){ $m=new Maladie($ligne[0],$ligne[1],$ligne[2]); $data[]=$m; } return $data; } public function Listmedicament() { $data= array(); $requete ="select * from medicament"; $resultat = mysql_query($requete); while($ligne=mysql_fetch_array($resultat)){ $m=new Medicament($ligne[0],$ligne[1],$ligne[2]); $data[]=$m; } return $data; } //....
et dans view mes pages , comme par exemple:
listdefinition.php
Selon cette hierarchie , il s'agit de mvc2 si je ne me trompe pas puisqu'il y a un seul fichier qui traite tout le metier.
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 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title><?php echo $dfn->getNom(); ?></title> </head> <body> <br /> <table id="o" class="o"> <?php $update=""; $maj=""; if($this->connIsAdmin()){ $maj="<a href=\"index.php?a=suppdef&id=".$dfn->getId()."\"><img src=\"view/img/supprim.png\" width=\"15\" height=\"15\" /></a> <a href=\"index.php?c=".$dfn->getId()."&modif=1\" ><img src=\"view/img/modif.png\" width=\"15\" height=\"15\" /></a>"; $update=$update."<form action=\"index.php?a=modifdef\" method=\"post\">"; $update=$update."<tr><td><div id=\"titre\">changer sujet</div></td><td></td></tr>"; $update=$update."<tr><td style=\"margin:5px;padding:5px\">الاسم : </td><td><input type=\"text\" name=\"nomdef\" value=\"".$dfn->getNom()."\" /> "; $update=$update."<input type=\"hidden\" name=\"iddef\" value=\"".$dfn->getId()."\" /></td></tr>"; $update=$update."<tr><td style=\"margin:5px;padding:5px\">الوصف:</td><td><textarea name=\"descdef\" cols=\"50\" rows=\"7\">".$dfn->getDescription()."</textarea> </td></tr> "; $update=$update."<tr><td style=\"margin:5px;padding:5px\"></td><td><input class=\"bouton\" type=\"submit\" value=\" changer \" /> </td></tr>"; $update=$update."</form>"; } if(isset($_GET['modif'])) echo $update; ?> <tr><td colspan="2"><div id="titre"><?php echo $dfn->getNom(); ?></div><?php echo $maj ?></td></tr> <tr><td colspan="2" style="margin:5px;padding:5px"><?php echo $dfn->getDescription(); ?></td></tr> </table> </body> </html>
vu que le projet n’était pas vraiment de grande taille , cette méthode me parait acceptable , mais dans le cas d'un projet d'une taille plus importante je vois mal utiliser tout ces if (100 cas de test ou plus) dans l'index. Ai-je raison ? y a t-il une meilleur façon d’implémenter le model mvc ?
Merci
Partager