Как правильно сделать rule для UrlManager в Yii2?

Есть таблица городов в б.д. в формате
city_id, city_name, city_slug
Городов очень много. Делаю доску объявлений. Хочу такую структуру URL:
site.ru/city/category
т.е. первый параметр - это city_slug.

Решил вопрос так:
'<city>/<category>/<page:\d+>' => 'main/index',
'<city>/<category>' => 'main/index',
'<city>' => 'main/index',
''=>'main/index',


Теперь первый параметр в URL считаем всегда городом. И приходится выше этого кода писать rule под абсолютно все остальные контроллеры/экшены

Есть такое решение:
<city:(moskva|spb|samara ... )>
но вписать сюда весь список городов ? Их несколько тыс. И они должны браться из бд.

В общем, смысл проблемы: нужно посмотреть первый параметр в URL, и поискать его в таблице (поле city_slug). Если таковой имеется - отправить запрос в соответствующий контроллер, если нет - игнорировать...
  • Вопрос задан
  • 703 просмотра
Пригласить эксперта
Ответы на вопрос 2
qonand
@qonand
Software Engineer
Создайте свой класс правил который будет выполнять необходимую Вам логику и используйте его
Ответ написан
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Теперь первый параметр в URL считаем всегда городом

И чем это плохо? Я так понимаю именно это Вам и нужно. Если есть урлы типа page/somepage/, просто укажите их правила раньше правил города. Получится, что если не сработали все правила, то первый параметр это url. UrlManager просто идет по массиву правил и когда находит подходящий далее не идет, так что изменяя порядок можно вполне добиться нужного результата. Или более сложный вариант предложил Максим Федоров
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы