deenween
@deenween
Laravel

Как правильно сделать роутинг на Yii2 если категории начинаются от главной страницы?

Всем привет.

Есть сайт. Категории начинаются от корня сайта. Например:
site.ru/категория1/
site.ru/категория1/категория2/
Как правильно настроить, чтобы ссылки с категориями обрабатывался например в контроллере catalog/category. Ссылки будут русскими буквами.

Пробовал через роутинг, не получилось, так как в yii2 опыта нет. Даже через .htaccess пробовал, тоже путного не получилось.
  • Вопрос задан
  • 273 просмотра
Пригласить эксперта
Ответы на вопрос 3
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Надо писать свой urlManager, но зачем такой вид url? Url должен быть максимально коротким и гибким. Если надо показать вложенность категорий, есть хлебные крошки.
При вашем подходе 2 элемент это название категории, то есть сделать раздел сайта, допустим "news" уже не получится. Или прийдется городить кучу проверок и исключений.
Ответ написан
@Kostik_1993
Web Developer
Честно я не работал с YII, но сделал бы наверное так.
таблица urls в это таблице храним слаги урлов, причем только тот который является последним сегментом в адресе, тоесть если адрес site.ru/категория1/категория2/ такой то в слаг будет записано "каегория2"
Таблица будет содержать в себе столбцы id, pageable_id, pageable_type, slud
Полиморфная связь
pageable_type - короткий идентификатор объекта или его полный namespace путь
pageable_id - это id продукта, категории, страницы и чего угодно что нужно вам обработать.

Создаем контроллер который обрабатывает все подряд адреса, кроме тех, которые прописаны в роутах

Контроллер получает полный URI и берет его последний сегмент, ищет в моделе Url по слагу, если не найдено ничего 404 иначе работаем дальше.

Категории нужно сделать через nestedset, итак у нас есть категория по последнему сегменту, получаем всех родителей и строим новый URI сравниваем с тем по которому мы сейчас находимся, если не совпадает то редиректим на тот что мы сгенерировали сами, это нужно чтобы не было доступа к одной и той же странице по разным адресам.

но предупрежу сразу такая схема будет работать только тогда когда у категорий может только один родитель

Иначе лучше сделать без вложености
Ответ написан
Комментировать
vyachin
@vyachin
Ищу работу
Комментировать
Ваш ответ на вопрос

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

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