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 :

MVC : que mettre dans la vue et que mettre dans le modèle ?


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut MVC : que mettre dans la vue et que mettre dans le modèle ?
    Je débute dans l'utilisation du concept du MVC. Je suis parti de cet exemple : http://bpesquet.developpez.com/tutor...hitecture-mvc/ et pour assimiler, je le fais évoluer. Notamment, j'ai ajouté un menu que j'insère dans le fichier gabarit.php et j'ajoute de nouvelles actions ; au départ, il n'y en avait que 2 : afficher la liste des billets et mettre un commentaire sur un billet existant. J'ai entrepris de réaliser un CRUD. La création d'un billet, c'est déjà au point. Mon problème concerne la suppression d'un billet. En effet, mon idée est d'afficher une liste des billets, l'utilisateur en sélectionne un puis on le supprime. Or l'affichage est la mission des vues et l'accès aux données des modèles. Or ici, pour afficher la liste des billets, on a besoin d'accéder à ceux-ci pour récupérer les titres, ce qui se fait côté modèle.
    En gros si l'on ne tient pas compte de l'architecture MVC, voici ce qu'il faut faire :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      $sql="SELECT BIL_ID,BIL_TITRE from t_billet";
    //exécution de la requête $sql 
    //puis
    <select name="delBillet">
    <?php while fetch { ?>
    <option value="<?php echo $titreBillet; ?>"><?php echo $titreBillet; ?> </option>
    <?php } ?>
    </select>


    Evidemment il ne s'agit que du principe mais on voit qu'il y a une boucle while dont le rôle est de faire de l'affichage (vue) mais pour ce faire, il faut récupérer des données (modèle). Ce que j'ai compris, c'est que la vue et le modèle n'interagissent pas, ils passent par le contrôleur. Or la boucle while fait à la fois de l'affichage et de l'accès aux données ; donc ma question est : comment gérer ça dans le cadre du MVC ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Ton modèle retourne un tableau de données.
    Ton contrôleur passer ce tableau à ta vue
    Ta vue itère sur le tableau pour afficher chaque élément.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Merci pour la réponse. Pour que le modèle retourne un tableau de données, il faut que j'utilise fetchAll() et non fetch(), non ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Tu utilises le fetch qui convient à ton besoin.
    Le fetchall renvoi effectivement un tableau , mais tu n'as pas de contrôle dessus. Avec un fetch classique tu le construit au fur et à mesure et peut donc modifier le contenu si nécessaire.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Si je pensais à fetchAll, c'était pour lire toutes les lignes en une seule fois, alors qu' avec un simple fetch, on ne peut lire qu'une seule ligne et certes on obtient un tableau (une cellule par colonne), donc s'il y a N lignes, il faudra l'appeler N fois, ce qui fait N appels à une fonction de modèle pour effectuer un affichage (vue), donc pas simple...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Ton fetch tu le fais bien évidemment dans un while pour construire ton tableau. Tu n'appele pas x fois la méthode du modele :


    Avec un fetch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public function foo(){
        $datas = array(); 
        while($row = $reponse->fetch()) {
             $row['age'] += 1; // Je suis capable d'agir sur les données de mon tableau
             $datas[] = $row;
        }
        return $datas;
    }
    Avec un fetchall :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function foo(){
        return $reponse->fetchall();
    }
    En interne le fetchall c'est rien de plus qu'un fetch dans un while.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Super, j'ai compris un truc.
    Pour en garder la trace, j'écris ici ce qui se passe :
    le routeur, dans son constructeur, crée un contrôleur : $this->ctrldelBillet = new ControleurdelBillet();Ce contrôleur, dans son constructeur, crée un modèle :$this->delBillet = new delBillet();Le routeur gère les actions demandées par l'utilisateur et si celui-ci demande de supprimer un billet, le routeur appelle une méthode du contrôleur qui elle appelle une méthode du modèle :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      if($_GET['action'] == 'delBillet') { 
    				$liste_billets=$this->ctrldelBillet->delete_Billet();}
    avec
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     public function delete_Billet() {
    		$listeBillets=$this->delBillet->getAllBillet();
    		return($listeBillets);}
    }
    et
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     public function getAllBillet() {
            $sql="SELECT BIL_ID,BIL_TITRE from t_billet";
            $nextbillet = $this->executerRequete($sql, NULL);
    		//$ret=$nextbillet->fetchAll(PDO::FETCH_ASSOC);
    		while($_ret=$nextbillet->fetch(PDO::FETCH_ASSOC)){
    			$ret[]=$_ret;
    		}
            return($ret) ;  // Accès à toutes les lignes du résultat
        }

    Cette méthode utilise bien un fetch et retourne un tableau.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/11/2014, 10h24
  2. [Toutes versions] Que mettre dans une cellule pour que estvide soit vrai
    Par jack-ft dans le forum Excel
    Réponses: 6
    Dernier message: 04/09/2012, 05h53
  3. Réponses: 7
    Dernier message: 10/03/2010, 19h45
  4. Réponses: 2
    Dernier message: 11/02/2010, 16h52
  5. Réponses: 3
    Dernier message: 26/04/2007, 11h50

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