4

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);
    }
4
  • Try to add \ like this : if ($exception instanceof \Illuminate\Database\Eloquent\ModelNotFoundException) { //... } and see if it will work ! Commented Jul 5, 2017 at 17:43
  • No it doesn't work either. Commented Jul 5, 2017 at 18:25
  • 1
    try to add use Illuminate\Database\Eloquent\ModelNotFoundException as ModelNotFoundException; on top an then if ($exception instanceof ModelNotFoundException) { //... } Commented Jul 5, 2017 at 18:35
  • 1
    Yes, it worked. Can you put this in the answer so that I can tick it as a solution? Thanks. Commented Jul 6, 2017 at 8:35

2 Answers 2

6

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);
}
Sign up to request clarification or add additional context in comments.

Comments

2

Sometimes an $exception is rethrown, so try to use

$exception->getPrevious() instanceof XXX

or

get_class($exception->getPrevious()) == 'XXX'

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.