2015-07-20 20 views
7

我有一些代碼可以調用db調用和網絡請求,並將它包裝在try/catch中。問題是,我永遠不能捕捉到的異常,他們似乎並沒有致命的例外:如何正確捕捉PHP異常(Laravel 5.1)

try { 
    // make db requests and network calls 
} catch (Exception $e) { 
    // handle exception 
} 

也就是說,我遇到這樣的異常:

[Illuminate\Database\QueryException] 
[PDOException] 
[InvalidArgumentException] 

有沒有一種辦法抓住這些例外?我是否需要明確每種可能的異常對象類型(意味着我必須創建多個try/catch),還是有推薦的方法來捕獲非致命異常?

+0

你把那個try/catch子句放在哪裏? –

+0

這是Laravel 4.2還是5+? –

+0

5.1。愚蠢的是,我沒有在Exception類之前使用反斜槓。讓我試試... –

回答

16

確保您正確使用您的名稱空間。

如果您在不提供其名稱空間的情況下使用某個類,PHP將在當前名稱空間中查找該類。 異常類存在於全局名稱空間中,因此如果您在某些名稱空間代碼中嘗試/ catch,例如你的控制器或型號,你需要做:

try { 
    //code causing exception to be thrown 
} catch(\Exception $e) { 
    //exception handling 
} 

如果你這樣做沒有辦法錯過任何例外。

否則,如果你在存儲在應用程序\ HTTP \控制器控制器代碼的異常,你釣到的魚會等待應用程序\ HTTP \控制器\異常拋出對象。

+0

啊。看起來像我的一個粗心的錯誤。我會嘗試這個,如果它的工作,我會選擇這個答案。 –

+0

我特意嘗試了Apps \ MyModel來查找一條記錄,它正在拋出類「Apps \ MyModel」找不到異常。我嘗試了FatalErrorException和\ Exception,都失敗了。任何想法? –