我正在检查ACL Action Helper的预调度方法中的ACL。如果允许该操作,则控制器/操作应该按照正常情况继续。 (没有问题)。但是,如果不允许,我想:
起初我以为我只会在Action Helper中调用_forward(),但我不能,因为它是受保护的方法。 View Renderer Action Helper说gotoSimple就像_forward,但它仍然执行完整的http重定向(从而更改浏览器中的URI)。
我可以尝试在View上调用setScriptPath(),然后调用Render(),但是这不会阻止所请求的控制器/操作被触发。我认为这可能是一个直截了当的答案,但这超出了我的经验水平!
任何帮助表示赞赏!
答案 0 :(得分:3)
通过简单地抛出Zend_Controller_Action_Exception
,最好使用代码401(未授权),可以轻松解决这个问题。
这将被错误处理程序插件捕获并转发到错误控制器。
然后,您可以检查此错误代码并进行相应处理。这是我的错误控制器
if ($errors->exception->getCode() == 401) {
$this->getResponse()->setHttpResponseCode(401);
return $this->_forward('unauthorized');
}
“未授权”操作只显示一个视图,但您可以使用它执行更多操作(例如,记录错误)