Динамические маршруты на одном уровне в Laravel 5.2 с разными контроллерами

У меня есть ProfileController и CategoryController,

Я хочу показать профили моих пользователей по следующему маршруту:

my.domain.com/firstname.lastname
my.domain.com/firstname2.lastname2
...

Так же, как это делает Facebook. Поэтому я хочу справиться с этим в моем ProfileController так что я закончил с таким маршрутом:

Route::get('/{userSlug}', array('uses' => 'ProfileController@getProfile'));

Это не проблема, и она отлично работает. Но теперь я хочу показать мои категории следующим образом:

my.domain.com/category-1
my.domain.com/category-2
...

Проблема в том, что я бы сделал маршрут так: Route::get('/{categorySlug}', array('uses' => 'CategoryController@getCategory')); но этот маршрут уже используется профилем.

Я знаю, что могу использовать только один контроллер и проверить там, является ли slug userSlug или categorySlug, но я действительно хочу отделить логику профиля от логики категории на свои контроллеры.

Какова лучшая практика здесь?

1 ответ

Решение

Если ваши пользовательские маршруты всегда будут в форме /firstname.lastname, вы можете попробовать ограничения регулярных выражений:

Route::get('/{userSlug}', array('uses' => 'ProfileController@getProfile'))
        ->where('name', '[a-z]+\.[a-z]+');

Затем проследите за этим по маршруту "поймай все". Тем не менее, вам было бы гораздо лучше добавить префикс URL вашей категории (например, /category/category-1) вместо

Другие вопросы по тегам