IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

est ce que mon mvc est correct ?


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Points : 70
    Points
    70
    Par défaut est ce que mon mvc est correct ?
    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
    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']);
    }
    //....
    dans le controller on appelle les classes et fait le traitement métier, puis appel la page voulu si nécessaire, par exemple :
    controller.php
    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';
     
    		}
    	}
    //...
    la classe model dans le dossier model, contient les requêtes qu'on appel dans le cotroler:
    model.php
    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;
    	}		
    //....
    le reste des classes dans le dossier model, sont des classes simples contenant les attributs et les getters et setters

    et dans view mes pages , comme par exemple:
    listdefinition.php
    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>
    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.
    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

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 243
    Points
    20 243
    Par défaut
    mais dans le cas d'un projet d'une taille plus importante je vois mal utiliser tout ces if
    Effectivement. En général on passe par un composant intermédiaire , le router, qui va analyser l'url demandée pour appeler le controller adéquat.

    En général on utilise une réecriture d'url qui donne des adresses du type :
    http://monsite.com/nomDuController/n....../n-argument

    Il suffit alors de parser cette url pour obtenir toutes les informations nécéssaires à l'appel du bon controller.

Discussions similaires

  1. [Diagramme de Classe] Est ce que mon schema est correct
    Par julien_brunet1 dans le forum Diagrammes de Classes
    Réponses: 6
    Dernier message: 07/07/2011, 21h22
  2. Est ce que mon programme est juste ?
    Par autoin dans le forum C
    Réponses: 6
    Dernier message: 25/01/2008, 17h06
  3. est ce que mon proxy est sécurisé avec cette config?
    Par kerkennah dans le forum Sécurité
    Réponses: 1
    Dernier message: 23/05/2007, 17h45
  4. Réponses: 1
    Dernier message: 08/02/2007, 09h11
  5. [Dates] calcul de date est ce que mon code est bon?
    Par carmen256 dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2006, 11h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo