我在一个名为News的模块中使用Gii生成的操作。我有一个使用id参数(如example.com/news/view/id/1
)的普通视图操作
当我使用这行代码时:
Yii::app()->createUrl("news/view",array("id"=>$data->primaryKey))
它生成example.com/news/1
(如果$data->primaryKey
为1)。这是不对的
当我使用这行代码时:
Yii::app()->createUrl("news/view/id/",array("id"=>$data->primaryKey))
它生成example.com/news/id/id/1
(如果$data->primaryKey
为1)。
我太困惑了!在第一种情况下,此函数不生成id作为参数名,在第二种情况下生成id!但在手动添加id之后。
我该怎么做才能用这个函数制作正确的url格式?
编辑:新闻是一个模块。我将代码行更改为:
Yii::app()->createUrl("news/default/view/id/",array("id"=>$data->primaryKey))
它生成的example.com/news/default/view/id/1
是正确的,但我不想要默认值!
在配置文件中,您有这样的东西:
'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>',
),
),
这创建了如何查看URL。
创建URL时不需要编写id
参数,因为这是默认值。查看urlmanager规则:
Yii::app()->createUrl("news/view/",array("id"=>$data->primaryKey)) => example.com/news/id/1
模块上脱脂:
Yii::app()->createUrl('/news/default/view', array('id' => $data->primaryKey))
您需要创建urlmanager规则。。。如何查看您的URL。更多详细信息请点击此处。
使用
'rules'=>array(
'news/<controller:w+>/<id:d+>'=>'news/<controller>/view',
'news/<controller:w+>/<action:w+>/<id:d+>'=>'news/<controller>/<action>',
'news/<controller:w+>/<action:w+>'=>'news/<controller>/<action>',
),
如果您有一个名为news
的模块。
您可以尝试用正则表达式替换news
,但如果正则表达式太宽,您将面临由多个正则表达式匹配的URL的问题。在规则数组键中使用类似<module:news|accounting|people>
的内容,在规则数组值中使用<module>
的内容。
如果你需要更复杂的url管理,或者如果你不能用正则表达式解决你的任务,你可以随时扩展CUrlManager。
尝试在以下目录中检查它:protected/config/main.php sir
urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'<controller:w+>/<id:d+>'=>'<controller>/view',
'<controller:w+>/<action:w+>/<id:d+>'=>'<controller>/<action>',
'<controller:w+>/<action:w+>'=>'<controll<>er>/<action>',
),
),
请注意,这条路走得好吗?:)