2009-07-21 6 views
0

J'ai deux contrôleurs qui ont des actions qui sont vraiment les mêmes. Comment faire référence à l'action identique dans un autre contrôleur?Comment copier une action Zend Framework sans la dupliquer?

class UserController extends Zend_Controller_Action { 

    public function listAction() { 
      //do something here 
    } 
} 

class AdminController extends Zend_Controller_Action { 

    public function listAction() { 
      //how to call UserController::listAction here? 
    } 
} 

Que dois-je mettre en AdminController :: listAction ci-dessus pour que je n'ai d'écrire le code dans UserController :: listAction?

grâce

Répondre

0

Vous pouvez transmettre à une autre action - il suffit de spécifier l'action, le contrôleur, le module et params.

Les paramètres sont définis par défaut sur les valeurs de la requête en cours, c'est-à-dire si vous êtes dans le module par défaut, le code ci-dessous redirigera vers la listeAction de UserController dans le module par défaut.

class AdminController extends Zend_Controller_Action { 

    public function listAction() { 
      //call UserController::listAction 
      return $this->_forward('list', 'user'); 
    } 
} 
3

Vous pouvez faire:

class baseController extends Zend_Controller_Action { 
// common controller actions 
    public function listAction() { 
     // do stuff 
    } 
} 

class AdminController extends baseController { 
// admin controller specific actions 
} 

class UserController extends baseController { 
// base controller specific actions 
} 

Vous pouvez également transmettre la demande à l'autre contrôleur en utilisant:

class AdminController extends Zend_Controller_Action { 
    public function listAction() { 
     $this->_forward('list','user'); 
    } 
} 

ou si vous préférez l'URL changer:

class AdminController extends Zend_Controller_Action { 
    public function listAction() { 
     $this->_redirect('/user/list'); 
    } 
} 
7

Je voudrais utiliser une action de contrôleur assistant, de cette façon, si vous avez à refaire la même chose, vous pouvez le réutiliser.

class My_Controller_Action_Helper_Whatever 
{ 
    public function direct() 
    { 
     return $this; 
    } 

    public function doSomething($paramA, $paramB) 
    { 
     // code 
     return $whatever; 
    } 
} 

mettre en œuvre ensuite dans vos contrôleurs:

class UserController extends Zend_Controller_Action 
{ 
    public function someAction() 
    { 
     $this->getHelper('Whatever')->doSomething($a, $b); 
    } 
} 

class AdminController extends Zend_Controller_Action 
{ 
    public function anotherAction() 
    { 
     $this->getHelper('Whatever')->doSomething($a, $b); 
    } 
}