@belorusovbelorus

Как правильно писать роуты для ajax в Laravel?

Делаю курсовой проект на Laravel.

Есть роуты:

// Стартовая страница
Route::get('/', 'IndexController@index');
// Поиск
Route::post('/searchSimple', ['as' => 'searchSimple', 'uses' => 'SearchController@search']);

Поиск со стартовой страницы вызывает ajax запрос:

type: 'POST',
url: 'searchSimple',
data: {
'_token': "{{ csrf_token() }}",
'search': search
},


search - это данные input.

Результаты возвращаются в json и загружаются в модальное окно. Все работает, но есть загвоздка - если перейти в браузере по маршруту /searchSimple, то вылезает ошибка no message. Вопрос - как правильно писать роуты для ajax в Laravel? Мне ведь вообще не нужно, чтобы при переходе в браузере по этому маршруту что-то открывалось. Не понимаю. Знаю, вопрос глупый, но вот так вот. Заранее спасибо.
  • Вопрос задан
  • 772 просмотра
Решения вопроса 2
@iljaGolubev
Можно так. Мидлварь - подключить и указывать для нужных роутов.
namespace App\Http\Middleware;
use Closure;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
class AjaxOnly
{
public function handle($request, Closure $next)
    {
        if(!$request->ajax()){
            throw new BadRequestHttpException('This resource only accepts an ajax requests');
        }
        return $next($request);
    }
}

Но лучше сделать чтобы /searchSimple показывал форму поиска. И поиск делать через GET, кстати.
Ответ написан
@artemmityushov
Как я понимаю вы хотите чтобы через ajax работало, а через браузер нет?
Браузер по умолчанию дергает GET, а у вас POST, поэтому через браузер будет ошибка.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
oxyberg
@oxyberg
Продуктовый дизайнер ВКонтакте
Например, можно накинуть мидлвейр на группу роутов для аякса.... Если нет — редиректить домой.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы