How to handle 404 as json response if route not found?

2k views Asked by At

Using Laravel 5.4, I would like to send the json response, while there is no route found in api.php, how can I archive with in api.php and without Controller and Model class.

short: How to handle when the route name is incorrect?

Tried with fallback :

Route::fallback(function(){
    return response()->json(['message' => 'Not Found!'], 404);
});

Error for above :

Attribute [fallback] does not exist.

Please help me, how to handle Route not found exception when incorrect route name request.

2

There are 2 answers

0
NobbyNobbs On BEST ANSWER

fallback available since version 5.6. try Route::any()


@NobbyNobbs - trim() expects parameter 1 to be string, object given

add at the end of your api.php (below all of the other routes) something like

Route::any('{path}', function() {
    return response()->json([
        'message' => 'Route not found'
    ], 404);
})->where('path', '.*');

how can I archive with in api.php and without Controller and Model class

In my opinion using of anonymous function as route handler it's not a best idea, because you can't cache your routes if you're using closures and it causes some overhead.

0
shaher11 On

You can make it globally by handling it in your app/Exceptions/Handler.php file.

Laravel v7

you can add this code below:

public function render($request, Throwable $exception)
    {
        if ($request->expectsJson()){

            if ($exception instanceof ModelNotFoundException){
                return response([
                    'errors'=> 'Object Not Found'
                ], 404);
            }

            if ($exception instanceof NotFoundHttpException){
                return response([
                    'errors'=> 'Route Not Found'
                ], 404);
            }
          
        }

        return parent::render($request, $exception);
        
    }