Настройка Url Для Контроллеров Модуля

Всем добрый день!Разрабатываю мультиязычный сайт(делал все как указано здесь yiiframework.com/wiki/294/seo-conform-multilingual-urls-language-selector-widget-i18n/

Создал модуль admin, где реализован контроллер theme, который позволяет переключить тему. В нем есть действие activate, которое принимает id темы. На настоящий момент настройки URL manager выглядят следующим образом


...

        'urlManager'=>array(

            'class'=>'application.components.UrlManager',

            'urlFormat'=>'path',

            'showScriptName'=>false,

            'rules'=>array(

                '<language:(ru|de|en)>/' => 'site/index',

                '<language:(ru|de|en)>/<action:(contact|login|logout)>/*' => 'site/<action>',

                '<language:(ru|de|en)>/<controller:\w+>/<id:\d+>'=>'<controller>/view',

                '<language:(ru|de|en)>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',

                '<language:(ru|de|en)>/<controller:\w+>/<action:\w+>/*'=>'<controller>/<action>',

                '<language:(ru|de|en)>/<module>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'<module>/<controller>/<action>',

                '<language:(ru|de|en)>/<module>/<controller:\w+>/<action:\w+>/*'=>'<module>/<controller>/<action>',

                '<language:(ru|de|en)>/<module>'=>'<module>',

            ),

        ),

...

ссылки на сайте выглядят следующим образом domen/currentlanguage/contoller/action или domen/currentlanguage/module/contoller/action

так вот когда я захожу на страницу где у меня отображается список доступных тем и там есть кнопка activate имеющая ссылку типа domen/en/admin/themes/activate/2. В настоящем положении дел контроллер не отрабатывает по такой ссылке.

Если же я комментирую правила в URL менеджере связанные с модулем. То ссылки начинают иметь вид domen/admin/themes/activate/id/2/language/en - контроллер отрабатывает как положено.

Искал много, пытался разобраться, но так и не выяснил как настроить URL в моем случае.

Нашел вот пост Samdark’a в теме yiiframework.com/forum/index.php/topic/21884-module-and-url-management/следующего содержания


'onBeginRequest'=>function($event){

  $route=Yii::app()->getRequest()->getPathInfo();

  $module=substr($route,0,strpos($route,'/'));

 

  if(Yii::app()->hasModule($module))

  {

    $module=Yii::app()->getModule($module);

    if(isset($module->urlRules))

    {

      $urlManager=Yii::app()->getUrlManager();

      $urlManager->addRules($module->urlRules);

    }

  }

  return true;

},

но понять как должен реализоваться метод $module->urlRules мне пока опыт не позволяет((

Товарищи, помогите настроить правила для URLmanager.

Может у samdark’a будет время объяснить что он имел ввиду и как строить $url->Rules.

Сделал я вот так:


            'rules'=>array(

                'language/<language:(ru|de|en)>/' => 'site/index',

                '<language:(ru|de|en)>/<action:(contact|login|logout)>/*' => 'site/<action>',

                //admin module section

                '<language:(ru|de|en)>/admin/<controller:\w+>/<action:\w+>/<themeId:\w+>'=>'admin/<controller>/<action>',

                '<language:(ru|de|en)>/<module:\w+>/<controller:\w+>/<action:\w+>/'=>'<module>/<controller>/<action>',


                '<language:(ru|de|en)>/<controller:\w+>/<id:\d+>'=>'<controller>/view',

                '<language:(ru|de|en)>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',

                '<language:(ru|de|en)>/<controller:\w+>/<action:\w+>/*'=>'<controller>/<action>',


                '<language:(ru|de|en)>/<module:\w+>'=>'<module>',

            ),

надеюсь кому то пригодится.

Я думаю, что имелся в виду не метод, а обычное public поле.

Метод CUrlManage::addRules принимает в качестве первого параметра массив с правилами, т.е. все, что нужно сделать, это объявить в классе модуля поле ‘urlRules’ и поместить туда массив правил для модуля.

Такой способ хорош тем, что модуль приобретает бОльшую автономность и повторную используемость - если модуль перенести в другое приложение, то не нужно будет дополнительно настраивать urlManager.

Собственно вот здесь подробнее http://rmcreative.ru/blog/post/curlmanageraddrules