2016-08-23 21 views
1

我想知道,如果可能的話,拋出自定義異常,當某些條件/查詢Laravel的雄辯模型沒有找到?如何在Laravel的雄辯模型中重寫ModelNotFoundException?

例如,如果我有一個Page模型,我該如何拋出我的自定義,PageNotFound異常?

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Page extends Model { 
} 

這種模式將引發ModelNotFoundException與給定的消息:

No query results for model [App\Page]. 
+0

要回答你提出的問題,你可以重寫每個模型中的'findOrFail'和'firstOrFail'方法,而不是拋出'ModelNotFoundException',你可以拋出任何你想要的東西。但是,正如Tony的回答中所提到的,您可以調用'getModel()'來代替。 – tam5

回答

3

app/Exceptions/Handler.php嘗試添加以下代碼來渲染功能

public function render($request, Exception $e) 
     { 
      if ($e 
       instanceof 
       \Illuminate\Database\Eloquent\ModelNotFoundException) 
      { 
       abort(404); 
      } 

      return parent::render($request, $e); 
     } 

編輯
頂部一旦你捕捉到ModelNotFoundE xception對象,你可以調用getModel()來獲取模型的類名。

+0

是的,我知道如何「處理」異常,但我有不同類型的模型,如Page,Post等。如何找出(不解析ModelNotFound異常的$ e-> getMessage()),哪個Model沒找到? 我問的是,當Model找不到時如何拋出自己的自定義異常? 我可以在我的控制器中檢查查詢是否返回任何結果,之後拋出異常或只是做我想做的事情,但是沒有任何簡單的解決方案來解決我的問題嗎? –

+0

只需在ModelNotFoundException對象上調用getModel()。看看我的編輯 –

+0

$ e-> getModel()方法是一個,我不知道它。它真的沒有回答我的問題,但它是更好的方法,然後我就是這樣做的。謝謝! –