我有一个控制器插件,检测网站是否已设置为维护,如果有,我希望它向前 - 维护控制器显示'抱歉...'消息。zend _forward控制器插件
我不想使用重定向,因为这会改变用户所在的当前url,但_forward是一个Zend_Controller_Action受保护的方法,所以不能在上下文之外调用,我该怎么做?
我有一个控制器插件,检测网站是否已设置为维护,如果有,我希望它向前 - 维护控制器显示'抱歉...'消息。zend _forward控制器插件
我不想使用重定向,因为这会改变用户所在的当前url,但_forward是一个Zend_Controller_Action受保护的方法,所以不能在上下文之外调用,我该怎么做?
当您的插件的preDispatch
方法被调用,请求不会被调度。所以你可以通过设置控制器和请求动作来“转发”:
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
if ($this->isMaintenanceMode()) {
$request->setControllerName('error');
$request->setActionName('maintenance');
}
}
由于插件无法正确地_forward()在你的控制器(S)init()
方法,你可以检查,说你的网站处于维护模式和的动作是不是你的维护行动标志然后$this->_forward('maintenance-action');
喜欢的东西:
// .. in your action controller
public function init() {
$maintenanceMode = checkTheFlagYourPluginSet();
// .. other code removed omitted
if ($maintainenceMode && $this->_request->getActionName() != 'maintenance-action') {
// return so that nothing else gets executed in the init()
return $this->_forward('maintenance-action');
}
}
我喜欢这种方式。我为什么没有想到它? ;) – 2010-11-25 16:33:45