Как обработать 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);
}