2011-06-03 63 views
2

我正在ACL動作助手的預調度方法中檢查ACL。如果行動被允許,控制器/行動應該照常進行。 (沒有問題)。如果它是不允許的,但是,我想:重置Zend Action Helper中的視圖

  • 離開requsted URI在瀏覽器
  • 跳過執行請求的操作方法
  • 產生「拒絕訪問」的消息

起初我以爲我只是在Action Helper中調用_forward(),但我不能,因爲它是一種受保護的方法。 View Renderer Action Helper說gotoSimple就像_forward,但是它仍然執行完整的http重定向(從而改變了瀏覽器中的URI)。

我可以嘗試在View上調用setScriptPath(),然後在Render()上調用,但是這不會阻止請求的控制器/動作被觸發。我認爲這可能是一個簡單的答案,但這超出了我的經驗水平!

任何援助讚賞!

+0

如何助手調用? – Rufinus 2011-06-03 05:05:38

回答

3

通過簡單地扔一個Zend_Controller_Action_Exception,最好是代碼401(未授權),這是最容易解決的。

這將被錯誤處理程序插件捕獲並轉發到錯誤控制器。

然後,您可以檢查此錯誤代碼並進行適當的處​​理。這是我的錯誤控制器

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

的「山寨版」的行動只是顯示一個視圖,但你可以用它來做更多(日誌例如錯誤)

+0

感謝菲爾,那真是太棒了。 – 2011-06-04 07:21:42