#laravel #routes
#laravel #маршруты
Вопрос:
Есть ли способ проверить резервный вариант маршрута для методов post? Этот код работает для любого get URL в моем файле маршрутов, т. Е. Я получаю этот ответ («Страница не найдена».), Если я ввожу и неправильно получаю URL.
Есть ли способ проверить то же самое для URL-адресов POST?
Route::fallback(function(){
return response()->json([
'status' => false,
'message' => 'Page Not Found.',
], 404);
});
Ответ №1:
Определите пользовательский резервный маршрут в конце вашего routes/api.php
Route::any('{any}', function(){
return response()->json([
'status' => false,
'message' => 'Page Not Found.',
], 404);
})->where('any', '.*');
Ответ №2:
use Request;
use SymfonyComponentHttpKernelExceptionMethodNotAllowedHttpException;
use SymfonyComponentHttpKernelExceptionNotFoundHttpException;
В app/Exceptions/Handler.php заменить функцию визуализации
public function render($request, Exception $exception)
{
if (Request::isMethod('post') amp;amp; $exception instanceof MethodNotAllowedHttpException) {
return response()->json([
'message' => 'Page Not Found',
'status' => false
], 500
);
}
return parent::render($request, $exception);
}
Или, если вы хотите, чтобы как NotFound, так и MethodNotAllowed, тогда
public function render($request, Exception $exception)
{
if ((Request::isMethod('post') amp;amp; $exception instanceof MethodNotAllowedHttpException) || (Request::isMethod('post') amp;amp; $exception instanceof NotFoundHttpException)) {
return response()->json([
'message' => 'Page Not Found',
'status' => false
], 500
);
}
return parent::render($request, $exception);
}
Комментарии:
1. Привет, Акаш, я соответствующим образом изменил код, и я получаю эту ошибку Symfony Component HttpKernel Exception MethodNotAllowedHttpException
2. измените экземпляр на MethodNotAllowedHttpException. пожалуйста, проверьте обновленный ответ
3. Это работает. Спасибо. Просто нужно было добавить использовать SymfonyComponent HttpKernelExceptionMethodNotAllowedHttpException;
Ответ №3:
Поместите этот скрипт в конец вашего файла маршрутов.
Route::any('{url?}/{sub_url?}', function(){
return response()->json([
'status' => false,
'message' => 'Page Not Found.',
], 404);
})
Он автоматически обнаружит, если кто-то попытается использовать какие-либо другие маршруты, как показано ниже.
laravel_project_path/public/any_string
laravel_project_path/public/any_string/any_string
Комментарии:
1. Это не работает. И данный код теперь также не работает с GET url. И нужно ли мне что-то передавать в {url}?
2. Это может быть сделано только до глубины 2. Используйте регулярное выражение с помощью where().
Ответ №4:
Попробуйте: в Route API
Route::fallback(function () { abort(500); });
В папке ресурсов
Подписаться:
- Перейдите к ресурсам
- Перейдите к представлениям
- Создать папку с ошибками
- Создать блейд 500.blade.php
Ответ №5:
Создайте любой запрос с любым URL.
//in web.php
Route::any('{any}', function(){
return 'Hello, I will accept any type of request!';
})->where('any', '.*');
Вы можете получать ошибку «Срок действия страницы 419 ИСТЕК» для запросов POST. Это из-за CsrfToken. Вы можете глобально отключить проверку токена CSRF, которая не является рекомендуемым методом, поскольку это создает риски для безопасности.
//in AppHttpMiddlewareVerifyCsrfToken.php
protected $except = [
'*' //Allow for all, or write custom exceptions.
];
Ответ №6:
Вы можете использовать данный метод для проверки URL-адреса POST и возврата страницы с ошибкой 404. Пожалуйста, сохраните код в web.php в последней строке.
Route::fallback(function(){
return Response::view('errors.404');
});