UrlManager

Есть контроллер GoodsController.

Хочу делать красивые урлы в зависимости от категории товара.

Например:




$this->createUrl('goods/view', array('name' => 'Алиса_в_стране_чудес',

                                     'entity' => Entities::Book));


давало бы: site.com/books/Алиса_в_стране_чудес


а

$this->createUrl('goods/view', array('name' => 'Титаник',

                                     'entity' => Entities::Video));


давало бы: site.com/video/Титаник



Как надо настроить UrlManager?




        'urlManager' => array(

            'urlFormat' => 'path',

            'showScriptName' => false,

            'urlSuffix' => '/',

            'rules' => array(

                'books/<name:.+>' => 'goods/view'  

                'video/<name:.+>' => 'goods/view', 

            ),

        ),



Понятно, что это не работает. Вопрос в том, что тут надо написать, что бы генерировались правильные урлы.

Т.е. даже два вопроса:

  1. Что бы createUrl в зависимости от параметра entity давал бы соответствующий Url

  2. Что бы в контроллере goods/view можно было узнать этот entity

Почему бы не обойтись в таком случае одном правилом?




'<entity:(books|video)>/<name:.+>' => 'goods/view' 


// или так, если категорий уж очень много.

'<entity:\w+>/<name:.+>' => 'goods/view'



А уже в контроллере свитчем определять категорию.

[font="Courier New"]


'<entity:(books|video)>/<name>' => 'goods/view' 


$entity = $_GET['entity'];

$name = $_GET['name']

[/font]

[font="Courier New"]И необязательно ставить прочерки вместо пробелов, если ваша кодировка utf-8.

$this->createUtl(‘post/tas’, array(‘tag’ => ‘Основы скриптинга AMX’)) даст ссылку[/font] …


/tag/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B+%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B8%D0%BD%D0%B3%D0%B0+AMX

[font="Courier New"]В строке браузера[/font]


/tag/Основы%20скриптинга%20AMX

Работает с русскими УРЛ??? Посмотрите плиз — может подскажете?

Честно не знаю. Делал статьи…делал теги. Все работало, как надо.

Не забывай об оптимизации…зачем тебе сдесь регулярка…


'tags/<title>' => 'tags/view', 


$this->createUtl('tags/view', array('title' => 'Основы скриптинга AMX'))


    public function actionView()

    {

        $title = $_GET['title'];

    }