2010-08-06 3 views
0

J'ai une action de contrôleur et je veux qu'elle soit exécutée après n'importe quelle action. J'ai écrit une aide d'action avec cette méthode:comment appeler l'action de plusieurs contrôleurs à partir de toute action dans ZF?

public function postDispatch(){  
    $actionstack = Zend_Controller_Action_HelperBroker::getStaticHelper('actionStack'); 
    $actionstack->direct('myaction', 'mycontroller'); 
} 

Mais il semble que coincé dans une boucle, ce qui ne va pas avec mon code?

Répondre

1

Vous pouvez créer un plug-in, par exemple:

class Plugin_Sidebar extends Zend_Controller_Plugin_Abstract { 

    public function postDispatch(Zend_Controller_Request_Abstract $request) 
    { 
     if($request->getModuleName() == 'admin') 
     { 
      return; 
     } 
     $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); 
     if (null === $viewRenderer->view) { 
      $viewRenderer->initView(); 
     } 
     $view = $viewRenderer->view; 

     $yt = new Zend_Gdata_YouTube(); 
     $view->videos = $yt->getUserUploads('MysteryGuitarMan'); 

    } 
} 

mettre donc les actions que vous voulez dans ce plugin et ces aciotns seront exécutés après tout.

0

Ce qui se passe, c'est que postDispatch est appelé à nouveau après que mycontroller-> myaction a été distribué, il appelle mycontroller-> myaction encore et encore.

+0

alors, comment puis-je résoudre ce problème? –

1

Vous pouvez utiliser l'aide d'action ActionStack, ou tout simplement la logique de cette méthode dans votre postDispatch()

+0

+ 1 Déplacez la logique vers votre assistant et votre problème sera résolu. –

+0

pourriez-vous me donner un exemple de code s'il vous plaît. Je ne veux pas utiliser l'aide d'actionstack dans mes actions. parce que de cette façon, je dois l'écrire dans chaque action du contrôleur. –

+0

Non, vous n'avez pas à l'écrire dans chaque action du contrôleur, seulement dans 'preDispatch()'. Vous pouvez également écrire un plugin Controller. – racetrack

Questions connexes