Как обработать 404 как ответ json, если маршрут не найден?

Используя Laravel 5.4, я хотел бы отправить ответ json, хотя в api.php не найден маршрут, как я могу архивировать с помощью api.php и без класса Controller и Model.

Короче говоря: как справиться, если название маршрута неверно?

Пробовал с fallback:

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

Ошибка для выше:

Attribute [fallback] does not exist.

Помогите, пожалуйста, как обработать исключение Route not found при неправильном запросе имени маршрута.

2 ответа

Решение

отступление доступно с версии 5.6. попробуй Route:: any ()


@NobbyNobbs - trim () ожидает, что параметр 1 будет строкой, объект задан

добавьте в конце вашего api.php (ниже всех других маршрутов) что-то вроде

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

Как я могу архивировать с в api.php и без класса контроллера и модели

На мой взгляд, использование анонимной функции в качестве обработчика маршрута - не лучшая идея, потому что вы не можете кэшировать свои маршруты, если используете замыкания, и это вызывает некоторые накладные расходы.

Вы можете сделать это глобально, обработав его в файле app / Exceptions / Handler.php .

Laravel v7

вы можете добавить этот код ниже:

      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);
        
    }
Другие вопросы по тегам