2009-07-21 4 views
0

У меня есть два контроллера, у которых есть некоторые действия, которые на самом деле одинаковы. Как я могу ссылаться на идентичное действие в другом контроллере?Как «скопировать» действие Zend Framework без дублирования?

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? 
    } 
} 

Что я положил в AdminController :: listAction выше, так что я только должен написать код в UserController :: listAction?

благодарит

ответ

0

Вы можете переадресовать к другому действию - просто указать действие, контроллер, модуль и Params.

Параметры по умолчанию для значений текущего запроса, то есть если вы находитесь в модуле по умолчанию, приведенный ниже код будет перенаправлен на listAction UserController в модуле по умолчанию.

class AdminController extends Zend_Controller_Action { 

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

Вы можете сделать:

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 
} 

Вы также можете направить запрос на другой контроллер с помощью:

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

или если вы предпочли бы URL, чтобы изменить:

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

Я бы использовал действие контроллера хелпер, таким образом, если вам когда-либо понадобится повторить то же самое, вы можете его повторно использовать.

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

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

Затем реализовать в контроллерах:

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); 
    } 
} 
Смежные вопросы