Urlmanager Custom Urlrule Class

Я решил сделать страницы на сайте с произвольными URL.

Для этого в начале конфига urlManager вписал:


'<slug:[\w\/]+>' => 'page/page/show',

  • все адреса направляются на page/page/show и в контроллере page устанавливается параметр slug.

Я поставил это правило в начале, но мне надо чтобы правило не срабатывало если страницы с данным slug нету. Так что я заменил его на


array('class' => 'application.modules.page.PageUrlRule',),

В этом классе, по мануалу, написал 2 метода. В parseUrl() сделал так, что если страница с запрошенным адресом есть то метод возвращает нужный роут и запускается контроллер для страниц. Все работает как надо, за исключением того что контроллеру не присваивается slug (как при простом правиле) и он поэтому не показывает страницу.

Как сделать чтобы slug присваивался?

Вносить изменения в контроллер не хочу. Думаю что при запросе той же страницы в контроллере она будет браться из кеша.

Если не ошибаюсь, достаточно в parseUrl принудительно установить GET-параметры.

Что-то типа


$_GET['slug'] = $slug;

return 'controller/action';

Спасибо. Помогло. Посмотрел в стандартном CUrlRule, там также делается.