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.
You can always catch the exception in the App\Exceptions\Handler.php
Import the exception into the class using the following:
use \Illuminate\Database\Eloquent\ModelNotFoundException;
and in the render method, add
if ($e instanceof ModelNotFoundException) {
return response()->json([
'message' => 'Record not found',
], 404);
}
Just to add, I ended up checking for these three exceptions:
And then returning JSON if expected:
if ($request->expectsJson()) {
return response()->json(['error' => $msg], $code);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With