是否有任何理由该代码会超时或在Action Helper PredisPatch()函数或插件prepispatch()函数中工作?
$request =$this->getActionController->getRequest();
$request->setModuleName('default');
$request->setControllerName('auth');
$request->setActionName('login');
$request->setDispatched(false);
我正在尝试实现zend_acl重定向向前,以便将访客用户发送到登录提示。一切正常,直到我们到达此特定的代码片段,然后耗尽。我在他的《实施zend_auth and zend_acl》的书《 Zend Frameworks》一书中遵循@Roballens的示例。问题仅在此代码段上。我已经在Action Helper类和插件类上尝试了相同的超时错误。它在Action方法()上正常工作。
因为您正在设置setDispatched(false)
,(我认为)动作助手将用于您的登录方法,因此您的ACL检查将再次运行。由于条件将再次失败,因此ZF将再次将内部重定向到登录方法,并且该过程重复(因此无限循环)。最简单的修复是添加附加条件,以便检查登录方法本身不会运行:
if (!$this->_acl->isAllowed($role, $resource, $priv) && $request->getActionName() != 'login') {
[...]
}
如果这不起作用,请查看是否要注释SetDispatched检查会有任何区别。