2017-07-05 4 views
1

app/Exceptions/Handler.phpの次のコードでは、最初のコードは機能しませんが、2番目のコードは機能します。ラーベルのエラー処理、get_classとinstanceofの比較

dd(get_class($exception));出力 "を照らし\データベース\雄弁\ ModelNotFoundException"。

最初はsimilar to the docです。どうすればinstanceofを使って動作させることができますか?

public function render($request, Exception $exception) 
    { 
     //dd(get_class($exception)); 
     // this does not work. 
     if ($exception instanceof Illuminate\Database\Eloquent\ModelNotFoundException 
) { 
      return response()->json(['error'=>['message'=>'Resouce not found']], 404); 
     } 
     // This one works. 
     if(get_class($exception) == "Illuminate\Database\Eloquent\ModelNotFoundException") { 
      return response()->json(['error'=>['message'=>'Resouce not found']], 404); 
     } 

     return parent::render($request, $exception); 
    } 
+0

は以下のように\を追加しようこれは 'if($ exception instanceof \ Illuminate \ Database \ Eloquent \ ModelNotFoundException){// ...}'であり、動作するかどうかを確認してください! – Maraboc

+0

いいえ、どちらも動作しません。 – shin

+1

は '追加ModelNotFoundExceptionとして雄弁\ ModelNotFoundException \を照らし\ Databaseを使用してみてください;'上に、その後 '場合(ModelNotFoundException instanceofは$例外){// ...}' – Maraboc

答えて

1

を使用するにinstanceofあなたは完全なクラス名を使用する必要がありますし、あなたのクラスは、名前空間を持っているならば、あなたはクラスの完全修飾クラス名を使用する必要があります。

そして、指定されたクラスの短縮名(別名)を使用してinstanceofを使用するもう1つの方法は、そのようuse声明のおかげで、あなたのケースでは、あなたがそれを使用することができますがあります:

use Illuminate\Database\Eloquent\ModelNotFoundException as ModelNotFoundException; // on top of course :) 

if ($exception instanceof ModelNotFoundException) { 
     return response()->json(['error'=>['message'=>'Resouce not found']], 404); 
} 
関連する問題