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 :

Appeler une méthode Action d'un autre controller


Sujet :

MVC PHP

  1. #1
    xtrimsky
    Invité(e)
    Par défaut Appeler une méthode Action d'un autre controller
    Bonjour,

    J'ai un petit problème.
    Il faut que j'appelle une méthode d'un Action Controller, à partir d'un autre Action Controller.
    J'ai regarder dans les cours et dans la doc de Zend Framework, mais je n'arrive pas à trouver comment faire sa.

    Es ce que quelqu'un pourrait svp m'aiguiller un peu?

    Merci pour tout aide .
    Dernière modification par julp ; 27/05/2008 à 02h03. Motif: Utilisez le bouton Résolu en bas ...

  2. #2
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 360
    Points : 170
    Points
    170
    Par défaut
    dans une vue tu peux appeler un controller par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->action('action','controller','module');
    , sinon tu à la méthode depuis ton controlleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->_redirect('module/controller/action');
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->_forward($action,$controller,$modules,array $params)
    . A toi de choisir la méthode qui te convient.

  3. #3
    xtrimsky
    Invité(e)
    Par défaut
    a merci, j'avais trouvé action dans la doc, mais c'est le redirect dont j'avais besoin ^^

  4. #4
    xtrimsky
    Invité(e)
    Par défaut
    euh par contre le redirect à l'air de changé de controller completement.
    et le forward à l'air de finir cette action puis de passé a une autre action.

    Moi ce que j'aurais besoin sa serait de faire quelque chose comme sa:

    action1
    {

    -du code
    -effectuer "action 2"
    -continuer ensuite ce code

    }

    action2
    {
    -du code
    }

    il n'y a pas de moyen de faire sa? je peu théoriquement m'en passé je pense, mais sa sera très compliqué :s

  5. #5
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    Et en factorisant le code, tout simplement ?
    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
    public action1()
    {
      // du code...
      DoSomething()
      // du code ...
     
    }
     
    public action2()
    {
      DoSomething()
    }
     
    private DoSomething()
    {
      // Du code...
    }

  6. #6
    xtrimsky
    Invité(e)
    Par défaut
    Le problème dans ton exemple, c'est que dans action 1 faut que j'execute du code après le DoSomething().

    et que DoSomething ce trouve dans un autre controlleur que action1 (obligatoirement).
    et que je ne peu pas mettre du code en plus dans le DoSomething().

    Et que le seul moyen que j'ai trouvé pour appelé une action dans un autre controleur sa arrete la suite de la premiere action.

    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
     
     
    //Controlleur 1
     
    public action1()
    {
      // du code...
      DoSomething() //appele d'un autre controlleur
      //en utilisant redirect ou forward, le code en dessous ne sera pas executé (si j'ai bien compris)
      // du code ...
     
    }
     
    //Controlleur 2
     
    public action2()
    {
      DoSomething()
    }
     
    private DoSomething()
    {
      // Du code...
    }
    le seul moyen que je vois pour l'instant, c'est de tout restructurer completement, mais sa m'embette pas mal car c'est pas moi qui a codé le 2eme controlleur.

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Essaye d'être clair.

    si tu veux appelée une méthode dans une autre méthode du même controlleur alors tu as la variable $this

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    function premireAction()
    {
       //code
    }
     
    function deuxiemeAction()
    {
       $this->premiereAction()
    }

    Par contre, si comme je le pense tu veux récupérer une action d'un autre controlleur, alors il faut passer par ::


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class IndexController extends Zend_Controller_Action
    {
    	/**
    	 * The default action - show the home page
    	 */
    	public function indexAction()
    	{
    		echo 'toto';
     
    	}
    }

    puis dans un autre controlleur, il faut faire quelque chose comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class testController extends Zend_Controller_Action
    {
    	 * The default action - show the home page
    	public function indexAction()
    	{
     
     
    		IndexController::indexAction();
    	}
     
    }

  8. #8
    xtrimsky
    Invité(e)
    Par défaut
    La 2ème solution est effectivement ce que je veux faire. Mais le problème c'est que les "::" ne fonction que lorsque c'est une classe Static, les controlleurs ne sont pas static ce qui est assez embettant.

  9. #9
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mai 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 257
    Points : 318
    Points
    318
    Par défaut
    Bonjour, je crois que les :: ne fonctionnent que lorsque la méthode est static mais c'est pas la classe qui doit être static. D'ailleurs, je ne sais pas est ce que cette notion de classe static existe?!!

  10. #10
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    La notion de static n'existe pas en PHP(heu...je crois), donc cela doit fonctionner.
    Sinon,fais un Helper alors, comme ça tu auras accès à ta méthode par tout dan ston code

  11. #11
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    La notion statique existe (heureusement, sinon les détracteurs Java nous fumeraient ) pour des variables de fonctions ou des membres de méthodes, mais aussi pour des méthodes !
    Statique


    De plus il y a eu des modifications depuis le version 5.3
    Depuis PHP 5.3.0, il est possible de référencer la classe en utilisant une variable. La valeur de la variable ne peut être un mot clé (e.g. self, parent et static).

  12. #12
    xtrimsky
    Invité(e)
    Par défaut
    Non enfaite mon 2ème problème aussi, c'est que je ne peu pas mettre la méthode en static non plus. Car la méthode fait appele a des $this, et le code est très compliqué, si je dois mettre cette méthode en static, je finirai par mettre 10 autres méthodes en static et c'est pas moi qui les a programmer, donc très compliqué.

    Je recherche un truc déja fait en Zend Framework qui me permettrait de faire appele a ce controlleur, malgrer que sa soit pas static.

    Bon sinon je peu faire le truc en utilisant les trucs proposé (forward ou redirect), mé sa sera aussi assez compliqué, mais moins tout de même que de passé en static.

  13. #13
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    La notion de static n'existe pas en PHP
    Et oui des fois je suis trèèèèèèèèèèèèèèèèèèèèèèèèès fatigué, et je peux raconter vraiment n'importe quoi.


  14. #14
    xtrimsky
    Invité(e)
    Par défaut
    J'ai finalement réussi à régler mon problème.
    Je me suis décidé a passé les fonctions en static, car j'avançais pas et fallais que je fasse quelque chose.
    J'ai donc passé quelques heures à mettre plusieurs méthode en static et finalement sa marche.

    Merci a toute les personnes qui m'ont aidé.

Discussions similaires

  1. Appeler une méthode de la vue au controler
    Par topolino dans le forum AngularJS
    Réponses: 11
    Dernier message: 18/02/2014, 20h59
  2. Réponses: 4
    Dernier message: 29/04/2013, 21h27
  3. Réponses: 8
    Dernier message: 02/06/2008, 11h56
  4. Appeler une méthode d'un autre servlet
    Par Mister Nono dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 28/09/2006, 23h09
  5. Problème pour appeler une méthode d'une autre classe
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 7
    Dernier message: 03/03/2006, 13h33

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