在Zend Action Helper中重置视图

时间:2011-06-03 04:59:47

标签: php zend-framework

我正在检查ACL Action Helper的预调度方法中的ACL。如果允许该操作,则控制器/操作应该按照正常情况继续。 (没有问题)。但是,如果不允许,我想:

  • 将请求的URI保留在浏览器中
  • 跳过执行请求的操作方法
  • 生成“拒绝访问”消息

起初我以为我只会在Action Helper中调用_forward(),但我不能,因为它是受保护的方法。 View Renderer Action Helper说gotoSimple就像_forward,但它仍然执行完整的http重定向(从而更改浏览器中的URI)。

我可以尝试在View上调用setScriptPath(),然后调用Render(),但是这不会阻止所请求的控制器/操作被触发。我认为这可能是一个直截了当的答案,但这超出了我的经验水平!

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:3)

通过简单地抛出Zend_Controller_Action_Exception,最好使用代码401(未授权),可以轻松解决这个问题。

这将被错误处理程序插件捕获并转发到错误控制器。

然后,您可以检查此错误代码并进行相应处理。这是我的错误控制器

if ($errors->exception->getCode() == 401) {
    $this->getResponse()->setHttpResponseCode(401);
    return $this->_forward('unauthorized');
}

“未授权”操作只显示一个视图,但您可以使用它执行更多操作(例如,记录错误)