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

MVC PHP Discussion :

Où mettre les acces à la base dans un modèle MVC


Sujet :

MVC PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 17
    Points : 17
    Points
    17
    Par défaut Où mettre les acces à la base dans un modèle MVC
    Bonjour,
    je développe une sorte de blog multilangue avec le Zend Framework et je me posais quelques questions sur le modèle MVC.

    D'après ce que j'ai compris de la doc, l'utilisateur demande une url qui est décomposée pour avoir le contrôleur. La requête est passé au controleur qui passe les donnees à la vue et ensuite retourne la bonne vue.

    La question que je me pose, c'est que dans ce système ce n'est que le contrôleur qui accède au modèle puis passe les données à la vue. Alors que dans le design pattern MVC la vue peut aussi lire les données.

    Pour etre plus clair:
    J'ai une classe du modèle qui est Langue qui me permet d'acceder aux differentes langues de mon site. Que faut il mieux faire :
    1) dans le controlleur faire un Langue->fetchall puis un this->view->assign
    ou
    2)dans la vue directement un Langue->fecthAll

    Ce qui me parait bizarre c'est que dans le second cas, lorsque l'utilisateur ne passe aucune données, le contrôleur est vide.
    En gros dans le second cas le contrôleur n'est la que pour faire des update ou des insert dans la base de donnée ou encore pour filtrer ce que donne l'utilisateur.

    Est-ce une bonne utilisation du MVC ?

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Il ne faut pas mettre de recherche de données dans la vue. La vue doit être simplifiée, contenir le moins possible de PHP. Les données doivent être prêtes avant d'entrer dans la vue.

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    alors pourquoi dans le modèle MVC on voit la vue qui accede au modele:


    c'est le getdata entre la vue et le modèle qui me met des doutes...

    Par exemple, si je dois afficher une donnée qui est dans un fichier et qui n'a pas besoin d'être tester ou modifier, autant que ce soit la vue qui y accède directement plutôt que ce soit le contrôleur qui y accède puis qui le donne à la vue. Par contre si la donnée doit être vérifié ou testé alors c'est le contrôleur qui y accède.
    Donc il y aurait 2 endroits possible pour accéder aux données, c'est pour ça qu'il y a 2 getdata dans le schéma.

    ça me parait logique non ?

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Le schéma montre que toutes les données passent par le modèle, la vue n'a jamais d'accès direct à la BDD. Le principe du MVC est de découper les rôles afin de ne pas avoir de cas particulier. Jamais la vue n'accède directement aux données sources, elles passent toutes par le modèle.

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Jamais la vue n'accède directement aux données sources, elles passent toutes par le modèle.
    Je me suis mal exprimé.
    Ce n'est que le modèle qui accède directement aux données, c'est clair et c'est le principe du MVC de dissocier.

    Ma question se voulait plus dirigé sur la manipulation du modèle.

    En gros, est-ce que la vue peu instancier un objet du modèle pour accéder à une donné ou il n'y a que le contrôleur qui a le droit d'instancier un objet du modèle ?

    d'après le getdata entre view et model, ça laisse sous entendre que dans la vue on peut écrire un truc du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $monModel = new classModel();
    $maValeur = $monModel->getData();
    Sur ce schéma on voit bien que la vue peu invoquer des méthodes du modèle, et normalement sur un MVC bien fait on implémente le pattern observer pour que lorsque le modèle est mis à jour par un controleur la vue se met aussi à jour. Ca correspond à la flèche qui va du modele à la vue. (difficile à faire sur une application web, ou alors avec un utilisation intensive d'ajax)

    Pour moi si la vue n'a pas le droit de manipuler des objets du modèle alors il y a une fleche en trop, celle qui va de la vu au modèle, non ?

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    En effet, je suis assez d'accord avec toi. La vue ne devrait pas invoquer des méthodes du modèle.

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Salut,

    Selon moi, la vue pourrait consulter les données du modèle, mais la modification serait reservée au contrôleur.

    Mais pour les frameworks web, la vue est souvent reléguée au rang de simple moteur de template, et c'est le contrôleur qui se charge d'instancier les modèles.

    Par exemple, dans le cas typique où on veut afficher des articles d'une catégorie, le contrôleur va :
    - Récuperer (et filtrer) la catégorie (typiquement passée en GET)
    - Trouver tout les articles de cette catégorie (fetchAll)
    - Passer un tableau d'articles à la vue

    On peut remarquer que la vue utilise bien le modèle puisqu'elle va récuperer le titre, le contenu, etc. mais le modèle a déjà été instancié par le contrôleur.
    Toute la documentation Ruby on Rails : gotapi.com/rubyrails
    Mes articles :
    > HAML : langage de template pour Ruby on Rails

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    d'accord, donc ce n'est pas contraire au modèle, et dans mon cas je pense que pour les données statiques sans test nécéssaire, la vue dialoguera avec le modèle et pour tous ce qui vient de l'utilisateur ce sera le contrôleur qui agira.

    Merci pour vos réponses.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/03/2013, 16h05
  2. Réponses: 9
    Dernier message: 18/06/2010, 11h26
  3. limiter les acces a la base ?
    Par ShaGaTsoin dans le forum Requêtes
    Réponses: 6
    Dernier message: 10/05/2010, 18h54
  4. Réponses: 2
    Dernier message: 07/05/2008, 23h57
  5. mettre les termes d'un string dans une struct
    Par grand's dans le forum SL & STL
    Réponses: 17
    Dernier message: 29/11/2004, 17h43

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