Правила рутинга

Доброго всем времени суток.

Суть дела: в одном из модулей, назовем его "страницы сайта", используется дерево для хранения инфы о страницах - контент и прочее, ссылки на страницы хранятся в базе, при создании дочерней страницы её урл собирается из урла родительской страницы и того что ввел пользователь при создании. То есть ссылки типа /parent/child1/child2 и так далее. За вывод страниц отвечает один экщн, ссответственно встала проблема задания правила рутинга, изначально задал что-то типа этого:




'/<route:\w+>'=>'pages/pages/view',

'/<route:\w+>/<route1:\w+>'=>'pages/pages/view'



и так бы пришлось сделать для каждого уровня вложенности. Далеко не лучший вариант.

В регулярных выражениях разбираюсь крайне плохо, поэтому искал какой-то готовый вариант, по прошествии n-ного количества времени, отчаявшись, полез курить код CUrlManager’а, и оттуда позаимствовал такую вот конструкцию: (\w+):?.*? то есть правила выглядят так теперь:




'/<route:(\w+):?.*?>'=>'pages/pages/view',

'/'=>'pages/pages/view',



первое для рутинга по страницам, второе для рутинга на главную - урл корневой страницы такой "/". Один минус есть у такого подхода - невозможно воспользоваться методом createUrl, получаем: The requested URL /parent/child1/child2 was not found on this server, поэтому ссылки на страницы вставляю просто:




CHtml::link($title, $url)



Собственно вопрос - объясните кто-нибудь что эта регэкспа значит, и есть ли лучший вариант задания правила для подобного случая?

я сделал бы так:

имеем - /action1/subaction1/subaction2/subaction3?page=7


'<route:([0-9a-z\/]*)>/*' => '/pages/pages/view'

в экшене $levels = explode(’/’, $_GET[‘route’]); получаем массив с урлами;

$_GET[‘page’] - номер страницы;

у меня похожая штука реализована с категориями так. Последним правилом в таблице маршрутов прописано:

‘<link:.+>’=>‘category/index’,

соответственно, все что не прошло по вышестоящим правилам парсится в контроллере CategoryController в экшене actionIndex из параметра $_GET[‘link’]

Но из опыта построения почти десятка сайтов на таком принципе все больше и больше склоняюсь к тому, что все роуты нужно держать в бд. ИМХО.