Yii应用程序()->;视图操作的createUrl


Yii app()->createUrl for view action

我在一个名为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>',
            ),
        ),

请注意,这条路走得好吗?:)