girish
girish

Reputation: 305

Add more attributes in laravel exception handler

I am building a restful api with laravel and adding a few more custom attributes to the laravel exception handler. Looking for the best way to do it.

I am currently using Laravel 6 and if I setup the Accept header to application/json, exceptions are returned in the json format. I still want to keep the existing logic on how laravel handles exception through render method like so:

    public function render($request, Exception $exception)
    {
        return parent::render($request, $exception);
    }

The current method returns only message when debug is false.

{
    "message": "No query results for model [App\\Model]"
}

I would like to add more attributes to the response data for the existing exception and custom ones:

{
    "message": "No query results for model [App\\Model]",
    "type": "exception",
    "url": "link to api docs",
    "id": "#id of the request"
}

I don't want to rewrite all the logic within render() but want to keep it as is by just adding these attributes.

Upvotes: 0

Views: 941

Answers (1)

hosein in jast
hosein in jast

Reputation: 370

i use this

public function render($request, Exception $exception)
    {
        if ($exception instanceof ModelNotFoundException || $exception instanceof NotFoundExeptionMessage){
            return $this->NotFoundExeptionMessage($request, $exception);
        }
        return parent::render($request, $exception);
    }

this code check the error and pass it to the NotFoundExeptionMessage if header sets application/json and else return a render and in second

public function NotFoundExeptionMessage($request, Exception $exception): JsonResponse
    {
        return $request->expectsJson()
            ? new JsonResponse([
                'data' => 'Not Found',
                'Status' => 'Error'
            ], 404)
            :        parent::render($request, $exception);

    }

i check if request want a json response we return a json message and else we return a render you can customize jsonresponse good luck

Upvotes: 0

Related Questions