2011-03-20 58 views
1

很明顯,您應該使用異常來處理應用程序中的錯誤。但是,如果您真的使用合併的消息向實際用戶展示他們?如何在基於MVC的網站中處理狀態消息?

如果是這樣,你必須國際化這些仍然可以管理的消息。但是簡單的狀態信息如「文件成功存儲」呢?這些並不是錯誤,所以你不能爲他們使用例外。你將如何處理這些?

我不喜歡爲每個區域單獨處理它們的想法,但寧願採用全局統一的方式來處理將顯示給用戶的錯誤簡單狀態消息。什麼是最好的方式來做到這一點?在模板級可能?這是正確的地方嗎?

事件系統的最低嚴重程度/級別/類型是通知還是最高致命錯誤?這是可行的嗎?

+0

爲什麼要向用戶公開異常?這些錯誤是針對開發者的!捕捉異常並向用戶顯示有意義的消息,並將錯誤記錄到文件/ db/email /中。 – Treffynnon 2011-03-20 17:05:28

+0

這就是我在第二句話中所要求的:)爲什麼不使用對兩者都有用的消息?如果不是,你會如何將它們分開? – DanMan 2011-03-20 17:22:30

+0

我還沒有找到一個異常結果直接適用於用戶的實例。也許是表單驗證異常,但即使如此,我仍然可以捕獲它們併爲用戶添加翻譯。 – Treffynnon 2011-03-20 18:16:02

回答

1

我爲此使用了一個FlashMessage類。它將消息存儲在會話中並顯示在下一頁加載。通過這種方式,您可以在所有模板中留出空間來顯示消息,並且如果有一組,它將顯示。然後,您可以重定向並POST到任何頁面上,並顯示消息。

+0

我最終使用了類似於您所描述的內容:一個註冊表,它保存代碼中任何位置的所有響應。有趣的部分是錯誤方法。將異常傳遞到包含內部錯誤消息的異常,並向用戶顯示錯誤消息。然後,異常實際上被拋出。 – DanMan 2011-05-28 15:32:13

0

我個人在模板級別上做到這一點。

例如...

控制器:

if(UsersModel::addNewUser($username)){ 
    $this->set("user_added", true); 
} 

在模板:

<? 
    if(!empty($user_added)){ 
    ?> 
     <p>User added successfully!</p> 
    <? 
    } 
?> 

與國際化沒有問題(同時使用gettext)在這裏也和控制器保持清晰:

if(!empty($user_added)){ 
     ?> 
      <p><?=_("User added successfully!");?></p> 
     <? 
} 
+0

這就是我想要避免的 - 在每個_individual_模板中測試_specific_條件。我想要一些更一般的東西,如:如果有消息(或消息),以某種方式將它(它們)添加到輸出。 – DanMan 2011-03-20 17:18:07

相關問題