2013-07-16 52 views
0

我正在学习Yii并陷入了网址创建问题。我有一个组件urlManager如下:Yii框架:错误的创建网址

'urlManager'=>array(
         'urlFormat'=>'path', 
         'rules'=>array(
           '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
           '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
           '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
           'admin/useredit/<id:\d+>'=>'admin/useredit', 
         ), 
         'showScriptName'=>false, 
         'urlSuffix'=>'.html', 
       ), 

当我使用这个:

$this->createUrl('admin/useredit',array('id'=>'2')) 

它创建 'xxx.com/admin/useredit/.html2',但我希望“xxx.com/admin /useredit/2.html'

什么可能是错的?

编辑: 的问题是只有在CGridView:

... 
'value' => 'CHtml::link("$data->username","'.$this->createUrl('admin/useredit',array('id'=>$data->id)).'".CHtml::encode($data->id))', 
... 

回答

0

您需要重新排序规则。将使用与您的路线相匹配的第一条规则。所以在你的情况下,这是<controller>/<action>。您应该将您的admin/useredit规则移至顶端。

如果要在CGridView列中创建URL,则需要用'围绕表达式。您也不需要拨打createUrl(),因为CHtml::link将接受带参数的路线。

'value'=>'CHtml::link($data->username,array("admin/useredit","id"=>$data->id))' 
+0

这有效,但问题是与CGridView –

+0

查看更新的答案。 –