嗨我怀疑Yii中的网址重写...
现在,当我从食物清单中打开一个特定的食物项目时,我会得到网址www.example.com/food/12345
。这里食物是控制者名称, 13245是foodId 。
但是当我打开那个食物项目(详情)时,我想重写上面的网址,如www.example.com/food/new-sweet-canada
。这里新的甜蜜加拿大代表(新的或旧的/测试/来自食物的位置)......
所以我不想吃foodId,而是想从db表中显示该食物的其他属性。我想我必须为此编写网址规则。
我想要它,因为我想让URL SEO友好。
但我不知道怎么做?或者有可能吗?
这是我的url rules array()
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
提前致谢
答案 0 :(得分:1)
你必须编写一个函数,它接收$ _GET变量作为食物的标签,使用$ model-&gt; findByAttribute(array('label'=&gt; $ _ get))找到id然后..通过传递模型来渲染页面。
所以代替你的行动是actionFood($ id)而不是actionFood($ label)
答案 1 :(得分:0)
可能有帮助
Yii::app()->controller->createUrl("food", array("foodId"=>"$old-$test-$location"));
其中$old
,$test
和$location
包含您的old/test/location
答案 2 :(得分:0)
此示例使用mod_rewrite(将其放在htaccess文件中):
RewriteEngine On
RewriteRule index.php/([A-Za-z0-9]+)/([A-Za-z0-9]+)$ index.php?$1=$2 [QSA,L]
RewriteRule index.php/([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+)$ index.php?$1=$2&$3=$4 [QSA,L]
然后可以通过$ _GET访问您的信息。然后,您可以像www.example.com/asd/qwe一样调用您的页面,对于您的脚本,它就像是被称为www.example.com?asd = qwe
我建议学习一些关于mod重写的内容,因为这个例子不太可能为你开箱即用。
答案 3 :(得分:0)
您可以将食品控制器的规则与其他控制器分开。
'food/delete/<id:\d+>'=>'food/delete',
'food/create'=>'food/create',
// ... also other food controller methods
'food/<attr:\w+>'=>'food/view',
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
Yii url management document可能会有所帮助。