Skip to content
Advertisement

Custom findOrFail for the API routes

I think this should be implemented by default since I’m working in routes/api.php.

I want to give a 404 error JSON response in case that we don’t find any rows for the given id argument on findOrFail() method.

Something like:

return response()->json([
    'status' => 'ERROR',
    'error' => '404 not found'
], 404);

Instead of the default Sorry, the page you are looking for could not be found. blade page.

I don’t want to do:

$item = Model::find($id);
if (is_null($item)) {
    return response()->json([
        'status' => 'ERROR',
        'error' => '404 not found'
    ], 404);
}

Everywhere when I getting an id, and I wouldn’t like to implement this in a middleware since it will cause some ‘mess’ on the api.php file.

Advertisement

Answer

You can always catch the exception in the AppExceptionsHandler.php

Import the exception into the class using the following:

use IlluminateDatabaseEloquentModelNotFoundException;

and in the render method, add

if ($e instanceof ModelNotFoundException) {

            return response()->json([
                'message' => 'Record not found',
            ], 404);

        }
User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement