Здравствуйте. Недавно начал изучать laravel и завис на маршрутизации.
Вообщем есть таблица со страницами pages:
id | name | content | alias
Есть катеории:
id | name | alias
все пути первого уровня, то есть может быть как site.com/cat_alias так и site.com/page_alias
Проблема в том, что в роутере у нас всегда исполняется только одно правило, то есть так вот писать нельзя:
Route::get('{alias}', 'PageController@show')->name('page');
Route::get('{alias}', 'CatController@show')->name('page');
А нужно, что бы сначала был сделан поиск {alias} по таблице с страницами, если там ничего не найдется, то делать поиск по категориям.
Можно, конечно из роутера обращаться к модели и после проверки уже делать нужный роут, но мне кажется это не по феншую уже будет. Как сделать это правильно? Спасибо.
Route::get('{alias}', 'YourController@show')->name('show');
В контроллере в методе show проверяем по таблице страниц, если найдено, то вызываем другой метод в контроллере. Если не найдено по таблице страниц, то смотрим с таблице категорий, и точно так же вызываем другой метод контроллера
Ок, пусть у нас Route::get('{alias}', 'RoutController@show')->name('show'); передали алиас, который принадлежит категории. Тогда нам придется оттуда вызывать \App\Http\Controllers\CatController::show();
Да и правда лучше тогда в роутере всё прописать, он ведь для этого и предназначен.