Yii路由和创建具有多个参数的URL

时间:2013-04-30 19:43:05

标签: php url yii routing

我想获取以下网址:

  

http://domain.com/post/1/some-titles-here

但我得到了:

  

http://domain.com/post/1?title=some-titles-here

我正在使用此配置:

'urlFormat' => 'path',
...
//'post/<id:\d+>/<title>' => 'post/view/', 
'post/<id:\d+>/<title:\w+>' => 'post/view/',
'post/<id:\d+>' => 'post/view/',
...

然后获取我正在执行的URL:

Yii::app()->createAbsoluteUrl('post/view', array('id' => $this->id,'title' => $this->title));

我遵循第三条规则: http://www.yiiframework.com/doc/guide/1.1/en/topics.url#using-named-parameters

2 个答案:

答案 0 :(得分:1)

您用来匹配标题的正则表达式不正确:<title:\w+>只匹配单个单词,但您的标题也有连字符。

Tuan是正确的;它符合下一个规则。那是因为URL管理器按照规则行事,直到找到匹配的规则。

请改用此规则:

'post/<id:\d+>/<title:([A-Za-z0-9-]+)>' => 'post/view/',

这将使标题与字母,数字和连字符匹配。

答案 1 :(得分:0)

这是一个适合我的代码:

'urlManager'=>array(
    'urlFormat'=>'path',
    'showScriptName' => false,
    'rules'=>array(
         '' => 'site/index',
         'article/<id:\d+>/<alias:[-\w]+>' => 'article/view',
         'article/cat/<id:\d+>-<alias:[-\w]+>' => 'category/view',

结果网址: