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

Zend Framework PHP Discussion :

Appeler méthode depuis la vue


Sujet :

Zend Framework PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2010
    Messages : 111
    Points : 49
    Points
    49
    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é ?

  2. #2
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    Un exemple serait beaucoup plus parlant pour expliquer ce que tu souhaites sans cela il est dur de comprendre

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2010
    Messages : 111
    Points : 49
    Points
    49
    Par défaut
    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"

  4. #4
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    Tu peux utiliser les vues partiels si tu le souhaite

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    ça fonctionne comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $form->view->toto; //dans le controleur 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $form2->view->tata; dans le contolleur 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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; ?>

  6. #6
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    Tu devrais tester avant de mettre ce genre de chose

  7. #7
    ovh
    ovh est déconnecté
    Rédacteur
    Avatar de ovh
    Homme Profil pro
    Architecte devops web full stack
    Inscrit en
    Mai 2002
    Messages
    3 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte devops web full stack

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 841
    Points : 6 514
    Points
    6 514
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  8. #8
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    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.

  9. #9
    ovh
    ovh est déconnecté
    Rédacteur
    Avatar de ovh
    Homme Profil pro
    Architecte devops web full stack
    Inscrit en
    Mai 2002
    Messages
    3 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte devops web full stack

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 841
    Points : 6 514
    Points
    6 514
    Par défaut
    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

  10. #10
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    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

  11. #11
    Membre régulier Avatar de Alcide_
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 79
    Points : 114
    Points
    114
    Par défaut
    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 ?

  12. #12
    ovh
    ovh est déconnecté
    Rédacteur
    Avatar de ovh
    Homme Profil pro
    Architecte devops web full stack
    Inscrit en
    Mai 2002
    Messages
    3 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte devops web full stack

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 841
    Points : 6 514
    Points
    6 514
    Par défaut
    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

  13. #13
    Membre régulier Avatar de Alcide_
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 79
    Points : 114
    Points
    114
    Par défaut
    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

Discussions similaires

  1. Réponses: 6
    Dernier message: 31/10/2012, 16h01
  2. Appeler méthode Silverlight depuis javascript
    Par Mozofeuk dans le forum Silverlight
    Réponses: 2
    Dernier message: 29/07/2009, 11h38
  3. Appeler une méthode depuis une "classmethod"
    Par monnomamoi dans le forum Général Python
    Réponses: 4
    Dernier message: 31/05/2009, 01h50
  4. Réponses: 6
    Dernier message: 29/04/2008, 09h34
  5. Réponses: 5
    Dernier message: 12/09/2007, 09h18

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