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 une fonction d'un autre controller


Sujet :

Zend Framework PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 36
    Points : 38
    Points
    38
    Par défaut Appeler une fonction d'un autre controller
    Bonjour,

    Dans mon controller, je cherche à appeler une fonction d'un autre controller (parfois d'un module différent). J'ai entendu parlé des _forward, _redirect ... mais ceux ci arrêtent l'exécusion du code actuel. Je procède actuellement avec des curl mais cela est très très long ...

    Actuellement j'ai ça :
    Dans mon premier controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    public function get($id)
    {
        $data = array();
        // du code ...        
        return new JsonModel($data);
     
    }
     
    // Dans mon second controller : 
     
    public function get($id)
    {
    $config = $this->getServiceLocator()->get('Config');
     
        $data = array();
        $dataU =curl_init($config['url'] .'/url1/url2/'. $id);
        $options = array(
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HTTPHEADER => array('Content-type: application/json'),
            CURLOPT_TIMEOUT => 0,
            );
        curl_setopt_array($dataU, $options);
        $table=json_decode(curl_exec($dataU));
        $data = get_object_vars($table);       
        // du code ...
     
          return new JsonModel($data);
     
    }
    Je ne sais pas si j'ai été très clair.

    Merci d'avance

  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
    Je connais pas bien ZF mais j'aurais tendance à dire que si tu as du code d'un controller qui doit/peut être appelé dans d'autre controller c'est que tu devrais plutôt en faire un helper.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    En attente de confirmation mail

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Points : 637
    Points
    637
    Par défaut
    Citation Envoyé par grunk Voir le message
    Je connais pas bien ZF mais j'aurais tendance à dire que si tu as du code d'un controller qui doit/peut être appelé dans d'autre controller c'est que tu devrais plutôt en faire un helper.
    +1, ou alors te construire un service layer, mais le code utilisé par plusieurs contrôleurs a vraiment sa place dans des classes externes à tes contrôleurs.

    Si vraiment tu y tiens, il y a l'action stack : http://framework.zend.com/manual/1.1...rs.actionstack

    C'est peu performant et sujet aux effets de bord, mais ça peut dépanner. Je m'en servait notamment dans mes backoffices quand sous un formulaire d'édition on voulait rappeler la liste des items et qu'il n'y avait pas de problématique de performances.

  4. #4
    Membre averti Avatar de Njörd
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 190
    Points : 390
    Points
    390
    Par défaut
    Bonsoir,

    Il me semble qu'il utilise la version 2 de ZF vu qu'il utilise la fonction getServiceLocator() dans son controller.

    Ne devrait-il pas plutôt se tourner vers la doc du DI de ZF 2 ? Et donc vers le service manager ?

  5. #5
    En attente de confirmation mail

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Points : 637
    Points
    637
    Par défaut
    My bad, le coup des _forward et _redirect m'a induit en erreur.

    Dans ce cas, plus qu'à implémenter un helper ou externaliser le code dans un service ou un modèle selon la nature du code partagé entre ces contrôleurs.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 36
    Points : 38
    Points
    38
    Par défaut
    Comment je peux implémenter un ActionHelper avec ZF2 ? Il me semble qu'il n'y en a plus depuis la version 2.

    Etant donné que je travail avec des Controller AbstractResFull, est-ce qu'il faut faire différement de l'ActionHelper ?

  7. #7
    En attente de confirmation mail

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Points : 637
    Points
    637
    Par défaut
    Citation Envoyé par schumi59 Voir le message
    Comment je peux implémenter un ActionHelper avec ZF2 ? Il me semble qu'il n'y en a plus depuis la version 2.

    Etant donné que je travail avec des Controller AbstractResFull, est-ce qu'il faut faire différement de l'ActionHelper ?
    Disons qu'ils s'appellent plugins maintenant et plus helpers
    http://framework.zend.com/manual/2.2...roller-plugins

    Pour moi tu as deux choix : soit un plugin de contrôleur, soit un service (ni plus ni moins un objet "maison" que tu pourras charger via le ServiceManager moyennant la configuration qui va bien). Pour faire le choix entre l'un et l'autre, ça dépends de ton code :

    • Est-ce qu'il s'agit de code métier propre à ton application ? Si oui, le service est le choix le plus logique.
    • Est-ce que c'est un code utilitaire, très proche du contrôleur ? Si oui, un plugin de contrôleur ferait sens ici.


    Un plugin doit implémenter au moins cette interface : http://framework.zend.com/apidoc/2.2...Interface.html comme tu vois elle est minimaliste... ou hériter de PluginAbstract pour s'épargner d'implémenter les get et setController. Un critère assez simple à évaluer, c'est que si tu as besoin de manipuler le contrôleur dans ton code, alors la piste du plugin est probablement la bonne.

    J'ai conscience que ça n'est pas franchement très clair ni accessible, mais le sujet n'est pas forcément simple

    J'espère que ça t'éclairera un peu quand même.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 36
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Nighty Voir le message
    Pour moi tu as deux choix : soit un plugin de contrôleur, soit un service (ni plus ni moins un objet "maison" que tu pourras charger via le ServiceManager moyennant la configuration qui va bien).
    J'ai choisis d'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $FO = $this->forward()->dispatch('MyModule/MyController/', array());
    $data = $FO->getVariables();
    et grâce a $data = $FO->getVariables(); je recupère les variables dont j'ai besoin suite a l'appel au controller.

    Citation Envoyé par Nighty Voir le message
    J'espère que ça t'éclairera un peu quand même.
    Merci beaucoup, cela m'a beaucoup aidé !!

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

Discussions similaires

  1. Appeller une fonction depuis un autre site
    Par ProgVal dans le forum Langage
    Réponses: 3
    Dernier message: 03/12/2008, 18h01
  2. Réponses: 9
    Dernier message: 20/03/2008, 18h19
  3. appeler une fonction dans un autre programme
    Par elghadi_mohamed dans le forum Langage
    Réponses: 3
    Dernier message: 19/10/2007, 19h58
  4. [VB.NET][2.0]Appeler une fonction d'un autre .VB
    Par Golzinne dans le forum Windows Forms
    Réponses: 4
    Dernier message: 29/03/2006, 23h20
  5. Appeler une fonction dans un autre cadre !
    Par rich25200 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/11/2005, 13h01

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