2016-08-23 15 views
1

いくつかの条件/クエリLaravelのEloquentモデルが見つからない場合、カスタム例外をスローすることは可能でしょうか?LaravelのEloquent ModelsでModelNotFoundExceptionをオーバーライドする方法は?

たとえば、私がPageモデルを持っている場合、私はカスタム、PageNotFoundの例外を投げることができますか?レンダリング機能

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

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

EDIT
の先頭に次のコードを追加しapp/Exceptions/Handler.php試みで

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

あなたが聞いた質問に答えるために、それぞれのモデルの 'findOrFail'と' firstOrFail'メソッドを文字通りオーバーライドして、 'ModelNotFoundException'を投げるのではなく、あなたが望むものを投げることができました。しかし、Tonyの答えで述べたように、代わりに 'getModel()'を呼び出すことができます。 – tam5

答えて

3

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Page extends Model { 
} 

このモデルは、与えられたメッセージでModelNotFoundExceptionがスローされますModelNotFoundEを捕まえたらモデルのクラス名を取得するにはgetModel()を呼び出すことができます。

+0

はい、私は例外を「ハンドル」する方法を知っている、しかし、私は(ModelNotFound例外の$ E->のgetMessage()を解析せず)を発見する方法などのページ、ポストやなど様々なタイプのモデルを、持って、どのモデル見つかりませんでした? 私が尋ねるのは、モデルが見つからないときに自分のカスタム例外をスローする方法です。 私は、クエリは結果を返した場合、そのスロー例外の後にチェックするか、ちょうど私がやりたいものは何でもするために私のコントローラで行うことができますが、私の質問のいずれかの最も単純な解決策はありませんでしょうか? –

+0

ModelNotFoundExceptionオブジェクトでgetModel()を呼び出すだけです。私の編集を参照してください –

+0

$ e-> getModel()メソッドは、私がそれについて知りませんでした。それは本当に私の質問に答えることはできませんでしたが、もっと良い方法です。ありがとう! –

関連する問題