Резервный маршрут для методов POST в Laravel?

#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);  });
  

В папке ресурсов

Подписаться:

  1. Перейдите к ресурсам
  2. Перейдите к представлениям
  3. Создать папку с ошибками
  4. Создать блейд 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');
});