jams
@jams
Веб-разработчик | PHP | WP | JS

Как в Laravel сделать один вид урла для разных моделей?

Всем привет.
Друзья, не могу никак понять, как правильно реализовать следующее:
- есть модель Category
- есть модель Page

Хочу сделать урлы для категорий вида site.com/category-name и для страниц хочу такие же site.com/page-name

Вижу только одни путь решения — сделать такой роут:

Route::get('/{category}', 'CategoryController@index');


И непосредственно, в методе index контроллера CategoryController делать проверку: искать в модели Category категорию по category из урла. И если ее нет, то искать в модели Page страницу с таким слагом. Если там и там нет, то уже отдавать abort(404);

Так себе способ визуально, интересно, есть ли еще какие-то решения. Заранее спасибо!

В идеале конечно как-то бы так сделать:

Route::get('/{category}', 'CategoryController@index');

Route::get('/{page}', 'PageController@index');


То есть, было бы хорошо, повесить конкретный контроллер на конкретный маршрут... Но не пойму как это можно сделать. Подскажите, пожалуйста, кто в курсе. Спасибо!
  • Вопрос задан
  • 121 просмотр
Пригласить эксперта
Ответы на вопрос 1
JhaoDa
@JhaoDa
LaravelRUS Team
Очевидно, что это никак нельзя сделать. Как система поймёт, что something это, допустим, категория, а не страница? Правильно, никак. Поэтому либо так, как ты сам расписал в вопросе — ищем одно, если не нашли, то ищем другое, либо добавлять префиксы/суффиксы/иерархию.

Конечно, можно накостылить через регулярки что-то типа
Route::get('/{category}', 'CategoryController@index')
    ->where('category', '(category1|category2|...)');
Но это, в общем случае, говнокод.
Ответ написан
Ваш ответ на вопрос

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

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