как лучше организовать Custom urlManager

Сейчас на сайте путь к категориям выглядит так http://site.ru/cat22/0

Задача привести ссылки на категории в виду

http://site.ru/avtokresla/0

http://site.ru/kolyaski

avtokresla,kolyaski - это названия категорий транслитом, которые в базе имеют свои ID

Более того категория avtokresla это контроллер avtokresla

а kolyaski это контроллер kolyaski

появляется задача выбора контроллера.

Мое решение

на событие ‘onBeginRequest’ назначена ‘onBegin_function’

в которой




function onBegin_function( $event ){

   $RequestUri = Yii::app()->getRequest()->getRequestUri(); // получаем URI

   preg_match('/([\w]+)\//i',$RequestUri, $m );

   $command = Yii::app()->db->createCommand("SELECT .... c_uri_title = '$m[1]'");

   $res = $command->query();




    if ( $cat_type > 0 ){

	Yii::app()->runController( 'kolyaski' );

    }else{

	Yii::app()->runController( 'avtokresla' );

    }


}



Проблема - вместе с Yii::app()->runController( ‘avtokresla’ ); выполняется контроллер по умолчанию

Yii::createWebApplication($config)->run();

Как мне отключать запуск этого контроллера в функции onBegin_function?

Кто-то скажет что можно сделать намного проще через urlManager, но есть специфика. У сайта меняется движок и структура, для SEO необходимо сохранить старые ссылки.

Поэтому нужно делать запрос в БД чтобы понять какой контроллер запускать.

Может быть это поможет


Yii::app()->end()

ссылка

Как раз для этого и нужен urlManager. Как только поменялась структура, меняются и правила в urlManager, в конечном итоге внешне и не видно какой контроллер запущен.

например так:

правило ‘page/<aliase:>’=>‘pages/read’,

преобразует адрес somesite.ru/page/test в somesite.ru/?r=pages/read&aliase=test

Работает. Спасибо