Я использую laravel для доставки страницы поиска со следующими маршрутами:
Route::get('/search', 'PagesController@search');
Route::get('/search/{q}', 'PagesController@search');
Route::post('/search', 'PagesController@search');
Первый маршрут обрабатывает посещение страницы поиска, на которой должна отображаться форма поиска.
Второй маршрут ожидает параметр в URL, который позволяет создавать закладки для поиска.
Третий маршрут получает форму с первой страницы в виде POST и обрабатывает поиск.
Каждый из трех маршрутов пытается использовать одну функцию в PagesController.
public function search(Request $request)
{
if ($request->has('q')) {
$q = $request->input('q');
}
if ($q) {
$models = Model::where('name', 'LIKE', "%{$q}%")
->orderBy('name', 'desc')
->take(10)
->get();
return view('pages.search', [ 'models' => $models, 'query' => $q ]);
}
return view ('home')->withMessage('No Details found. Try to search again !');
}
Мой вопрос: как мне заставить единственную функцию Контроллера обрабатывать три маршрута? Чтобы передать {q} из URL-адреса, я думаю, что мне нужно добавить еще один параметр в функцию поиска, но в этом случае происходит сбой на двух маршрутах, которые не имеют {q}.
В этой ситуации это отдельная функция для каждого типа ответа?