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); }