Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
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 01/08/2011, 13h12   #1
Candidat au titre de Membre du Club
 
Inscription : septembre 2010
Messages : 67
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2010
Messages : 67
Points : 14
Points : 14
Par défaut Appeler méthode depuis la vue

Bonjour,

Dans une application on a souvent besoin dans une vue de faire apparaitre un élements provenant d'une méthode d'un autre controller.

Sous cakePHP on utilise les "elements" qui permettent de faire ça...

Comment faut il faire avec Zend pour arriver au résultat souhaité ?
siriu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 13h29   #2
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Un exemple serait beaucoup plus parlant pour expliquer ce que tu souhaites sans cela il est dur de comprendre
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 15h12   #3
Candidat au titre de Membre du Club
 
Inscription : septembre 2010
Messages : 67
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2010
Messages : 67
Points : 14
Points : 14
Par exemple lorsque je visualise la vue "liste" du controller "recette" je voudrai que dans une colonne du design apparaisse également le résultat de la méthode "lastArticles" du controller "article"
siriu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 19h39   #4
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Tu peux utiliser les vues partiels si tu le souhaite
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 17h39   #5
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 79
Points : 79
ça fonctionne comme ça ?

Code :
1
2
 
$form->view->toto; //dans le controleur 1
Code :
1
2
 
$form2->view->tata; dans le contolleur 2
Code :
1
2
3
4
5
6
7
8
9
10
 
 
je suis dans le phtml toto
 
<h1>je suis le modelA</h1>
$this->toto;
 
j'appelle le modèle B a traver phtml2
<h1>je suis le moduleB</h1>
    <?php echo $this->partial('phtml2.phtml', $this->tata; ?>
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 18h19   #6
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Tu devrais tester avant de mettre ce genre de chose
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2011, 14h44   #7
ovh
Rédacteur
 
Avatar de ovh
 
Homme
Ingénieur développement logiciels
Inscription : mai 2002
Messages : 3 725
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mai 2002
Messages : 3 725
Points : 6 310
Points : 6 310
La vraie question est pourquoi tu veux faire ça...

Souvent ce type de demande révèle une mauvaise pratique.
Citation:
Envoyé par siriu Voir le message
Par exemple lorsque je visualise la vue "liste" du controller "recette" je voudrai que dans une colonne du design apparaisse également le résultat de la méthode "lastArticles" du controller "article"
Si tu as besoin des derniers articles, c'est ton modèle qui doit te donner le résultat, pas un contrôleur. Donc dans ta méthode listeAction() de ton contrôleur Recette, tu pourrais récupérer les derniers articles depuis le modèle (= un appel de méthode, au pire avec une instanciation d'objet, 2 lignes), et l'ajouter à la vue (1 ligne).
Rien n'empêche par contre de factoriser ton code de vue dans un phtml dédié, et de l'appeler dans chacune des vues où c'est nécessaire par un simple :
Code php :
echo $this->render("derniers-articles.phtml");

Le problème c'est que souvent les développeurs écrivent la logique métier dans le contrôleur, au lieu de le faire dans le modèle. C'est ainsi qu'on se retrouve avec une application difficilement maintenable, avec du code mal placé et souvent dupliqué, et qu'on a besoin d'appeler des méthodes de contrôleur dans un autre...
Le modèle est souvent perçu comme une simple couche d'accès à la base de données, alors qu'en fait c'est bien plus que cela. C'est tout l'intérêt de l'objet : embarquer la logique dans les objets métier, pas seulement traiter la persistance.

Bref, la bonne réponse à ta question est de refactoriser ton code pour ne pas avoir à faire ce genre d'appel, qui n'a pas vraiment de sens
Un contrôleur doit se contenter de jouer le chef d'orchestre :
  • recevoir l'input utilisateur
  • le valider et le transmettre au modèle pour traitement
  • ajouter les résultats provenant du modèle dans la vue
Je le répète encore, la logique métier doit s'implémenter dans la couche métier, c'est-à-dire dans le modèle.
__________________
Tutoriels sur les UPS, e-commerce, PHP, critiques de livres...

Ce forum est fait pour vous et surtout par vous, merci d'en respecter les règles.
Je n'ai rien à voir avec la société www.ovh.com !
ovh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2011, 16h15   #8
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
En effet et sur Zend je dirais même plus au niveau des rowClass et non au niveau de DbTable, car la rowClass représente un seul objet.
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2011, 17h00   #9
ovh
Rédacteur
 
Avatar de ovh
 
Homme
Ingénieur développement logiciels
Inscription : mai 2002
Messages : 3 725
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mai 2002
Messages : 3 725
Points : 6 310
Points : 6 310
Citation:
Envoyé par 5h4rk Voir le message
En effet et sur Zend je dirais même plus au niveau des rowClass et non au niveau de DbTable, car la rowClass représente un seul objet.
La logique peut être aux 2 niveaux ça dépend des cas. Quand je parle de "modèle" c'est au sens large.

Typiquement tu peux avoir besoin d'une méthode de sélection fine d'un ensemble de lignes (= objets), dans ce cas la méthode se trouvera bien au niveau de l'objet repository (DbTable), et pas l'objet Row
__________________
Tutoriels sur les UPS, e-commerce, PHP, critiques de livres...

Ce forum est fait pour vous et surtout par vous, merci d'en respecter les règles.
Je n'ai rien à voir avec la société www.ovh.com !
ovh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2011, 17h30   #10
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
En effet mais je parlais et je pensais que toi aussi, des methodes qui s appliquent aux objet donc a un row et non pas un rowset
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 16h27   #11
Membre régulier
 
Avatar de Alcide_
 
Homme
Étudiant
Inscription : juin 2008
Messages : 70
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 23
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 70
Points : 78
Points : 78
Citation:
Envoyé par siriu Voir le message
Par exemple lorsque je visualise la vue "liste" du controller "recette" je voudrai que dans une colonne du design apparaisse également le résultat de la méthode "lastArticles" du controller "article"
Si l'affichage du dernier article doit persister au niveau du layout, il serait plutôt conseiller d'utiliser soit l'actionStack, soit l'aide de vue "action()".
par contre, si tu doit appeler ta méthode "lastArticles" dans une autre action, je te déconseille ce genre de méthodes qui vont, comme dit précédemment rendre beaucoup moins lisible ton code.
Et dans ce cas, comme le dis ovh, il vaudrait mieux faire appel à tes deux modèles "articles" et "recettes" dans ton contrôleur. Mais le problème qui va apparaître c'est que tu vas faire des appels au modèle "articles" dans ton contrôleur "recette"... Peut-être faudrait-il renommer tes contrôleurs pour plus de cohérence ?
Alcide_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2011, 12h05   #12
ovh
Rédacteur
 
Avatar de ovh
 
Homme
Ingénieur développement logiciels
Inscription : mai 2002
Messages : 3 725
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mai 2002
Messages : 3 725
Points : 6 310
Points : 6 310
Citation:
Envoyé par Alcide_ Voir le message
Mais le problème qui va apparaître c'est que tu vas faire des appels au modèle "articles" dans ton contrôleur "recette"... Peut-être faudrait-il renommer tes contrôleurs pour plus de cohérence ?
Je ne vois pas en quoi c'est un problème ?
Un contrôleur n'est pas obligé de n'utiliser qu'une seule classe métier, encore heureux
__________________
Tutoriels sur les UPS, e-commerce, PHP, critiques de livres...

Ce forum est fait pour vous et surtout par vous, merci d'en respecter les règles.
Je n'ai rien à voir avec la société www.ovh.com !
ovh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2011, 16h22   #13
Membre régulier
 
Avatar de Alcide_
 
Homme
Étudiant
Inscription : juin 2008
Messages : 70
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 23
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 70
Points : 78
Points : 78
Complètement d'accord, je n’émettais que l'hypothèse d'un renommage de contrôleur car, de ce que j'en avais compris, son organisation actuel paraissait assez "crudienne" (un contrôleur par type de ressource) et non pas par page.
Mais, si mon message porte à confusion, je m'en excuse et ne peux que te citer :
Citation:
Envoyé par ovh Voir le message
Un contrôleur n'est pas obligé de n'utiliser qu'une seule classe métier, encore heureux
Alcide_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h48.


 
 
 
 
Partenaires

Hébergement Web