我正在 ACL 操作助手的预分派(dispatch)方法中检查 ACL。如果允许该操作,则 Controller /操作应正常继续。 (那里没有问题)。但是,如果不允许,我想:
- 在浏览器中保留请求的 URI
- 跳过执行请求的操作方法
- 生成“访问被拒绝”消息
起初我以为我会在 Action Helper 中调用 _forward(),但我不能,因为它是一个 protected 方法。 View Renderer Action Helper 表示 gotoSimple 类似于 _forward,但它仍然执行完整的 http 重定向(从而更改浏览器中的 URI)。
我可以尝试在 View 上调用 setScriptPath(),然后调用 Render(),但这不会阻止请求的 Controller /操作触发。我认为这个问题可能有一个简单的答案,但这超出了我的经验水平!
感谢任何帮助!
最佳答案
这个问题最容易解决,只需抛出一个 Zend_Controller_Action_Exception
,最好使用代码 401(未经授权)。
这将被错误处理插件捕获并转发到错误 Controller 。
然后您可以检查此错误代码并进行适当处理。这是在我的错误 Controller 中
if ($errors->exception->getCode() == 401) {
$this->getResponse()->setHttpResponseCode(401);
return $this->_forward('unauthorized');
}
“未经授权”操作仅显示一个 View ,但您可以使用它执行更多操作(例如记录错误)
关于php - 重置 Zend Action Helper 中的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6223124/