laravel-5.4laravel-exceptions

Laravel error handling, get_class vs instanceof


In the following code in app/Exceptions/Handler.php, the first one doesn't work but the second one does.

dd(get_class($exception)); outputs "Illuminate\Database\Eloquent\ModelNotFoundException".

The first one is similar to the doc. How can I make it work using 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);
    }

Solution

  • To use instanceof you must use the full class name, and if your class has a namespace then you should use the fully qualified class name of the class.

    And there is an other way to use instanceof using a short name (alias) for a given class thanks to use statement, in your case you can use it like so :

    use Illuminate\Database\Eloquent\ModelNotFoundException as ModelNotFoundException; // on top of course :) 
    
    if ($exception instanceof ModelNotFoundException) {
            return response()->json(['error'=>['message'=>'Resouce not found']], 404);
    }