控制器插件中的zend _forward

时间:2010-11-25 16:08:40

标签: php zend-framework

我有一个控制器插件,它检测网站是否已设置为维护,如果有,我希望它_forward to维护控制器显示'sorry ...'消息。

我不想使用重定向,因为这会改变用户所在的当前url,但是_forward是一个Zend_Controller_Action受保护的方法,所以不能在上下文之外调用,我该怎么做?

2 个答案:

答案 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');
    }
}