Как «скопировать» Zend Framework Action, не дублируя его? - PullRequest
0 голосов
/ 21 июля 2009

У меня есть два контроллера, у которых есть некоторые действия, которые действительно одинаковы. Как мне сослаться на идентичное действие в другом контроллере?

 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?

спасибо

Ответы [ 3 ]

7 голосов
/ 21 июля 2009

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

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);
    }
}
3 голосов
/ 21 июля 2009

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

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');
    }
}
0 голосов
/ 21 июля 2009

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

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

class AdminController extends Zend_Controller_Action {

    public function listAction() {
            //call UserController::listAction
            return $this->_forward('list', 'user');
    }  
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...