我正在学习Yii并进入url创建问题。我有一个组件urlManager如下:
'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 :(得分:0)
您需要重新排序规则。将使用与您的路线匹配的第一条规则。所以在你的情况下,这是<controller>/<action>
。您应该将admin/useredit
规则移至顶部。
如果您想在CGridView
列中创建网址,则需要使用'
围绕您的表达。您也无需致电createUrl()
,因为CHtml::link
会接受带参数的路线。
'value'=>'CHtml::link($data->username,array("admin/useredit","id"=>$data->id))'