【问题标题】:Yii url management issueYii url 管理问题
【发布时间】:2014-06-10 04:58:31
【问题描述】:

我正在使用 Yii 框架开发一个 Web 应用程序,但在 url 重写方面遇到了一点问题。

问题在于下面代码中的最后一条规则。应该把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',
        ),
    ),

【问题讨论】:

  • 一个词以上实际抛出的错误。
  • 只是它可以找到动作。但正如 Samuel Liew 所说,这只是规则的立场。具体规则必须高于一般规则。

标签: php regex yii url-rewriting


【解决方案1】:

您无需对 ID 中的连字符进行转义:

'category/<id:[A-Z a-z 0-9 _ -]+>' => 'category/view',

一个更简单的解决方案是:

'category/<id>' => 'category/view',

另外,请注意,您必须将此特定规则置于一般(默认)规则之上。

将类别规则移到&lt;controller&gt; 的上方。否则,例如,您的应用会尝试在 CategoryController 中查找 actionChildrenStuff()

通常我会在这三个通用规则之上添加新规则。

【讨论】:

  • 这些都不起作用:(这很奇怪。你认为这可能是配置错误吗?
  • 忘了说您必须将特定规则置于一般规则之上。将该类别规则移到 &lt;controller&gt; 的上方。
  • 哦,我现在感觉好傻!就是这样!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多