如何“复制”Zend框架操作而不重复它?

时间:2009-07-21 08:58:01

标签: php 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中编写代码?

感谢

3 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分: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');
    }
}

或者您希望更改网址:

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

答案 2 :(得分:0)

您可以转发到另一个操作 - 只需指定操作,控制器,模块和参数。

参数默认为当前请求的值,即如果您在默认模块中,则下面的代码将重定向到默认模块中UserController的listAction。

class AdminController extends Zend_Controller_Action {

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