2012-06-22 62 views
0

我試圖通過我的web應用程序提供用戶友好的錯誤消息,以應對某些錯誤。我希望能夠傳遞拋出異常調用和額外的參數,比如「USER」,這樣錯誤控制器就給這個參數添加視圖,並顯示一個不同的樣式頁面,可能有更友好的顏色和有意義的消息,但我可以不知道如何傳遞額外的參數。這是當前設置:傳遞zend錯誤控制器的額外參數

有些檢查在控制器之一:

throw new Zend_Controller_Exception("User not found",403); 

錯誤控制器(ErrorController.php):

class ErrorController 
    extends Zend_Controller_Action 
    { 
     public function errorAction() 
     { 
     $errors = $this->_getParam('error_handler'); 
     switch ($errors->type) { 

所以我想能夠這樣做:

$this->view->type = $this->_getParam('type'); 
在控制器

,這樣我就可以在視圖中做到這一點:

if($this->type == "USER") { 
    some css stuff 
    echo $this->exception; 

回答

4

聽起來像是你可以:

  1. 創建一個接受你的其他參數自定義異常類(My_Exception_UserFriendly等)

  2. 在控制器(或其他地方)拋出此異常與您的自定義參數,可以和

  3. 在您的ErrorController中使用instanceof檢查來填充您的視圖變量。

而且,正如您已經注意到的,請確保您的視圖在嘗試呈現之前檢查該用戶友好數據的存在。

更新

其實,更加緊密地閱讀,它看起來並不像你所需要的例外攜帶任何額外的信息。簡單地創建自定義類應該足以滿足您的檢測/渲染目的。

您可以創建一個空的(!在library/My/Exception/UserFiendly.php)異常類:

class My_Exception_UserFriendly extends Exception 
{ 
} 

然後,當你遇到你想顯示在一個友好的方式用戶的錯誤,只是把這種類型的異常:

if ($rainyDay){ 
    throw new My_Exception_UserFriendly('Seeing some inclement weather, I\'m afraid'); 
} 

然後在您ErrorController::errorAction()

$exception = $this->_getParam('error_handler')->exception; 
if ($exception instanceof My_Exception_UserFriendly){ 
    $this->view->friendlyErrorMessage = $exception->getMessage(); 
} 

最後,倒在你的視圖腳本error/error.phtml

<?php if ($this->friendlyErrorMessage): ?> 
<h2>With Humble Apologies, Valued User</h2> 
<p><?= $this->escape($this->friendlyErrorMessage) ?></p> 
<?php endif; ?> 

事實上,有些人認爲我們呈現特定消息純屬觀點考慮。在這種情況下,您可以創建一個自定義例外 - 可能會擴展此通用UserFriendly例外 - 每個您希望支持的友好消息。然後在您的ErrorController中,檢測特定的子類型並在視圖中設置一個標識該子類型的鍵。然後,在視圖中,呈現與給定鍵相對應的特定友好消息。可能純粹爲了純潔而過於矯枉過正,但爲了那些重視這些考慮的人而將它扔在那裏。

+0

我不知道如何創建一個可以接受額外爭論的custome異常類,你能提供一個例子嗎? 我只是創建另一個擴展Zend_Controller_Action類嗎?另外我錯過了從我的問題擴展Zend_Controller_Action,不知道這是否改變了任何東西! –

+0

對不起,只是注意到這個更新,這正是我想要的,謝謝!也許每次自定義異常都是過度的,但隨着應用程序的增長可能對實現有用! –

+0

太棒了,很高興它有幫助。乾杯! –