我有两个控制器,它们有一些非常相同的动作。 如何在另一个控制器中引用相同的动作?
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 :(得分: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');
}
}