2013-05-28 49 views
1

我正在使用PHP的Codeigniter來構建我的應用程序,而且有時候我覺得我在處理錯誤時會被淹死。我在所有地方添加「失敗者」可能會失敗。下面是一些例子:如何在CodeIgniter中做適當的錯誤處理?

在模型:

  1. 如果不給所有模型方法的參數,返回false
  2. 對於每一個MySQL查詢,如果查詢失敗,返回false
  3. 視情況而定如果查詢的行數是< 1(其中它必須是> 0),則返回false

在控制器:

  1. 如果控制器方法缺少必需的參數,返回false
  2. 如果被叫模型返回false,重定向一個錯誤提示信息,或顯示錯誤觀點

我想知道是什麼我是否過度使用它?我覺得可能沒有必要測試每一個mysql查詢,但是如果其中一個確實因任何原因而中斷,那麼腳本的其餘部分就會失敗或者爲用戶搞砸了。

最後,在錯誤處理的所有上述階段中,哪些地方適合將錯誤記錄到文件?

+0

模型應該拋出異常並捕獲並解決它們可以拋出的異常。如果/如何向用戶呈現異常是控制器/視圖的工作。 – Orangepill

+0

請記住,在開發環境中處理錯誤和處理面向用戶的實時環境中的錯誤可能會是兩件不同的事情。 @Orangepill是正確的,雖然。在模型中捕獲異常,然後使用您的控制器/視圖來決定是應該展示全面的調試轉儲還是告訴用戶您有一個「oopsie」。「 –

回答

0

如果你在一個函數中有這麼多的回報,你的代碼結構很差。如果你正在運行原始的SQL查詢,除非你正在訪問元數據,否則你最好是交給模型(CI有的東西)。

對於您的方法,請考慮type-hinting。東西寫成:

function FunctionNameHere($user, $id, $test) { 
} 

可以通過考慮通過在User對象,它可以讓你那麼做更好的寫法:

function FunctionNameHere(User $user, $test) { 
} 

哪個做所有你的「不正確的參數集」驗證你並會拋出一個錯誤。

對於SQL查詢,請考慮使用模型,這將允許您再次檢索對象。沒有物體?返回NULL。問題解決了。

除了返回整數值之外,還可以考慮拋出Exception(並且不要害怕延長Exception類,這會讓您在不同的塊中捕獲不同的異常!)。這將允許你在你的代碼中整齊地包裝一些常見的錯誤情況(比如向用戶扔出一個華而不實的錯誤框,用異常做檢查?檢查)。

+0

我不是在傳遞用戶對象時遵循你的意思,你能詳細說明嗎?對於SQL,我使用模型來執行查詢,如果模型返回false,那麼我知道它不起作用 - 但我仍然在調用THAT模型的模型中檢查它,然後在控制器中檢查它,或者我可能在某個地方誤解了你。你能把我鏈接到一些能詳細說明如何做的文章嗎?謝謝 –

+0

@ user371699:你的模型是不同的對象嗎?如果是的話,你可以鍵入 - 提示你的函數只接受這種類型的參數,如果它是false或null,或者不是那種類型的對象,你的代碼將會拋出一個錯誤(可以隨意轉換爲異常)關於參數,我所做的只是將可能傳遞給模型引用的參數合併在一起。 –

相關問題