Laravel если условие маршрута не выполнено, то игнорируйте

#laravel

#ларавель

Вопрос:

У меня есть следующие 2 маршрута:

 Route::get('/{category}/{slug?}', [CategoryController::class, 'index'])-gt;name('category.index')-gt;where('slug', 'trending|subtitled|feature');  

Этот маршрут

 Route::get('/cookies-policy', [PageController::class, 'cookiesPolicy'])-gt;name('cookiesPolicy');  

Когда я пытаюсь получить доступ ко второму маршруту, вместо этого осуществляется доступ к первому контроллеру маршрута.

Как мне добавить условие к первому маршруту, если первого сегмента нет trending , subtitled или feature затем проигнорировать? Я думал, что достиг этого с помощью: -gt;where('slug', 'trending|subtitled|feature')

Комментарии:

1. измените порядок этих 2 маршрутов … и ваше условие where будет зависеть от параметра категории, а не от параметра slug, если вы говорите о «первом сегменте».

2. попробовал это сделать, но затем маршрут категории не сработал. cookies-policy не входит trending,subtitled or feature , поэтому он не должен соответствовать сегменту категории

3. если вы измените порядок маршрута, то второй маршрут будет соответствовать именно этому пути, а не первому маршруту, который вы показали … и у вас нет вашего условия » где » в сегменте категории, которое вы поместили в сегмент слизней … where('slug', ...) означает параметр slug, а не параметр категории

4. Спасибо, я добавил условие » где » для сегмента категории, объявление теперь работает правильно.

5. Вам нужно изменить порядок маршрута

Ответ №1:

Вам нужно будет настроить, чтобы вы where назначали шаблон параметру category маршрута slug , а не параметру:

 -gt;where('category', ...);