我正在使用Yii Framework开发一个Web应用程序,我在重写网址时遇到了一些问题。
问题在于下面代码中的最后一条规则。它应该将 localhost/app/category/some-friendly-url-category-name
(此部分会显示在浏览器中)转换为 localhost/app/category/view/id/some-friendly-url-category-name
当类别名称只有一个单词时,它可以正常工作,例如: vehicles 。 但是当它多于一个词时它不起作用,例如: children-stuff
'urlManager'=>array(
'showScriptName' => false,
'urlFormat'=>'path',
'rules'=>array(
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
'category/<id:[A-Za-z0-9_\-]+>' => 'category/view',
),
),
答案 0 :(得分:2)
您无需转义ID中的连字符:
'category/<id:[A-Z a-z 0-9 _ -]+>' => 'category/view',
更简单的解决方案是:
'category/<id>' => 'category/view',
另外,请注意您必须将此特定规则置于常规(默认)规则之上。
将类别规则移到<controller>
之上。否则,您的应用会尝试在您的CategoryController中找到actionChildrenStuff()
,例如。
通常我会在这三个一般规则之上添加新规则。