我们可以在Yii中以controller/action/id
到/id
的格式显示网址吗?另外,一个主要问题是我只需要在特定的控制器/动作上执行此操作。
For Instance:如果我有/user/post/ujjwal
,那么我只需要显示/ujjwal
。当我有/image/display/ujjwal
时,它可以是原样吗?
我已经阅读了Yii中的网址管理,并了解其中显示的内容。但我不知道如何根据controller/action
来控制网址。
任何帮助都将不胜感激。
谢谢, Ujjwal
答案 0 :(得分:2)
在我看来,您无法将一个自定义网址映射到两个或多个网址路径或操作。与有人访问/my_username
时相同,我们会将其重定向到/user/post/ujjwal
或/image/display/ujjwal
。由于这种模式/规则,应用程序将会混淆。
因此,我建议您将/image/display/ujjwal
更改为其他模式/规则。与/my_username/image
我使用username
作为所选用户名的查询字符串。
'components'=>array(
.....
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'<username:[\w.]+>'=>'user/post',
'<username:[\w.]+>/display'=>'image/display',
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
....
之前有人问过这个类似的问题:How to specify a SEO friendly url like twitter www.twitter.com/<name> using YII framework
答案 1 :(得分:1)
在config/main.php
尝试
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'rules'=>array(
'user/post/<user:\w+>'=>'<user>', //this should be the very first rule
//other rules
),
),
),
答案 2 :(得分:0)
你可以做些什么,但有一些副作用。如果你把它放在config/main.php
:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'rules'=>array(
'image/<action>/<username>' => 'image/action/username',
'<username>' => 'user/post/username',
),
),
首先列出所有更具体的规则,然后其他所有内容都将转到/user/post/something
。