@Corsair_TM

Как ограничить роуты только для AJAX запросов?

Добрый день, пытаюсь ограничить роут только для AJAX запросов, но не получается. Нашел такой способ, но он не работает, использую последнюю версию Laravel.
Создал посредника OnlyAjaxRequest.php
public function handle($request, Closure $next)
    {
        if ($request->ajax()) {
            return $next($request);
        }

        abort(404);
    }

Прописал его в Kernel.php
protected $routeMiddleware = [
        .....
        'ajax' => \App\Http\Middleware\OnlyAjaxRequest::class
    ];

Роут прописал:
Route::post('/product/handle', 'Page\ProductController@handle')->middleware('ajax');

Если вбить адрес /product/handle в адресную строку браузера должен по идее выдавать 404 страницу.
Отключил дебагер, показывает сообщение "Whoops, looks like something went wrong." вместо 404 страницы.
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
glaphire
@glaphire
PHP developer
Я перенесла код из Вашего примера и думаю, что воспроизвела проблему - если слать не-ajax запрос через postman, то все ок, миддлвара работает. Дебаг в .env отключила. Обычно для отправки данных по ajax используют POST метод, но если использовать GET (вбить урл в адресную строку браузера), то первой выпадет ошибка 405 (method not allowed), но дефолтный текст будет "Oops, something went wrong" (для 500й ошибки он такой же), т.е. ошибка неправильного метода отрабатывает раньше, чем код миддлвары.
Если этот кейс не раскрывает проблему, то давайте смотреть всю цепочку кода.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы