Yii app()->为查看动作创建URL

jgovgodb  于 2022-11-09  发布在  其他
关注(0)|答案(3)|浏览(146)

我在一个叫做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之后。
我应该怎么做才能使正确的网址格式与此功能?

**编辑:**news是一个模块,我把这行代码修改为:

Yii::app()->createUrl("news/default/view/id/",array("id"=>$data->primaryKey))

它生成的example.com/news/default/view/id/1是正确的,但我不想要那个默认值!

sc4hvdpw

sc4hvdpw1#

在配置文件中,您可以看到如下内容:

'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))

你需要创建一个url管理器规则...你想要如何查看你的网址。更多详情here

ddhy6vgd

ddhy6vgd2#

用途

'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被多个正则表达式匹配问题。请在rules数组键中使用<module:news|accounting|people>,在rules数组值中使用<module>
如果您需要更复杂的url管理,或者如果您不能用正则表达式解决您的任务,您可以随时扩展CUrlManager。

2eafrhcq

2eafrhcq3#

尝试在此目录中检查它:保护/配置/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>',
            ),
        ),

请注意,这是路由好吗?:)

相关问题