zend框架插件 - predispatch()

时间:2010-09-02 12:40:04

标签: php zend-framework plugins zend-framework-mvc

我用predispatch()方法编写了一个插件来检查每个控制器请求的访问权限。我已经将插件设为:

类My_Plugin_Checklogin扩展Zend_Controller_Plugin_Abstract {     公共函数preDispatch(){

    if (isset($_SESSION['Zend_Auth_Static'])) {
        //no login
        $request = $this->getRequest();
        //the request
        $request->setModuleName('default');
        $request->setControllerName('index');
        $request->setActionName('index');
        //send to default/login/index
    }
}

}

现在在每个控制器请求之前调用predispatch()。

但也不允许我登录。由于predispatch方法,总是让我登录页面。我如何设置predispatch方法。

请帮忙。

1 个答案:

答案 0 :(得分:0)

对于特定控制器(和/或操作)跳过此插件的最简单方法可能是在插件preDispatch()方法的开头添加条件

public function preDispatch(Zend_Controller_Request_Abstract $request)
{
    if ($request->getModuleName() == 'default' 
     && $request->getControllerName() == 'login'
     && $request->getActionName() == 'index') {
        return ;
    }

    if (isset($_SESSION['Zend_Auth_Static'])) {
       // your code goes here
    }
}