Здравствуйте
Осваиваю Yii и столкнулся с проблемой. Опишу ситуацию:
Есть несколько контроллеров (моделей), которые обрабатывают разные типы материалов сайта. Например, Post - посты блога, Pages - отдельные страницы сайта. Я хочу, чтобы к любому материалу можно было задавать любой url.
Т.е. например пишу новый пост в блог и задаю ему URL: my-megapost/of/blog. Или создаю страничку "О сайте" и задаю ей произвольный URL типа: company/all/about/us.
Эти URL соответственно хранятся в базе.
В main.php у меня прописано примерно следующее:
'urlManager'=>array( 'urlFormat'=>'path', 'rules'=>array( 'blog/<id:d+>'=>'post/show', 'blog/<id:d+>/update'=>'post/update',
Т.е. заданы какие-то 'статические' правила для URL'ов.
Я хочу чтобы при каком-либо запросе, URL сначала проверялся по тем правилам, которые заданы в 'rules', в случае промаха (ни одно правило не подошло) запрашивался бы контроллер соответствующий запросу (как сейчас и происходит) и если такого контроллера нету, то тогда вызывалась бы моя функция, которая уже обращалась к базе и смотрела есть ли в базе такой URL.
Каким образом реализовать подобное? В каком направлении копать?
Пока что я дошел до того, что нужно переопределить функции runController и createController класса CWebApplication. Которые как раз вроде бы и отвечают за поиск и создание нужного контроллера. Но мне кажется, что должно быть более корректное решение проблемы
p.s. Просто так писать в 'rules' правило вида '<url:.+>'=>'site/default' не хочется, так как при этом запросы (action'сы) не прописанные в 'rules', но существующие, обрабатываются некорректно.