Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > MVC
MVC Forum de support sur le développement d'applications de type modèle-vue-contrôleur avec Zend Framework ainsi que vos questions sur les plugins, les helpers etc. Avant de poster -> Cours MVC, FAQ ZF Controller
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/08/2007, 14h11   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2003
Messages : 17
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 17
Points : 13
Points : 13
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 ?
bbmt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2007, 08h58   #2
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2007, 10h13   #3
Candidat au titre de Membre du Club
 
Inscription : novembre 2003
Messages : 17
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 17
Points : 13
Points : 13
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 ?
bbmt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2007, 10h21   #4
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2007, 11h59   #5
Candidat au titre de Membre du Club
 
Inscription : novembre 2003
Messages : 17
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 17
Points : 13
Points : 13
Citation:
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 :
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 ?
bbmt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2007, 12h21   #6
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
En effet, je suis assez d'accord avec toi. La vue ne devrait pas invoquer des méthodes du modèle.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2007, 12h31   #7
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
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
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2007, 15h21   #8
Candidat au titre de Membre du Club
 
Inscription : novembre 2003
Messages : 17
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 17
Points : 13
Points : 13
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.
bbmt est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h23.


 
 
 
 
Partenaires

Hébergement Web