我有一个控制器插件,它检测网站是否已设置为维护,如果有,我希望它_forward to维护控制器显示'sorry ...'消息。
我不想使用重定向,因为这会改变用户所在的当前url,但是_forward是一个Zend_Controller_Action受保护的方法,所以不能在上下文之外调用,我该怎么做?
答案 0 :(得分:6)
调用插件的preDispatch
方法时,不会调度请求。因此,您只需在请求上设置控制器和操作即可“转发”:
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
if ($this->isMaintenanceMode()) {
$request->setControllerName('error');
$request->setActionName('maintenance');
}
}
答案 1 :(得分:0)
由于插件无法正确_forward();在您的控制器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');
}
}