【问题标题】:URL management issues in YiiYii 中的 URL 管理问题
【发布时间】:2014-10-28 21:49:02
【问题描述】:

您好,我在 yii 中的 URL 管理遇到问题。

我有一个模型供应商和另一个模型产品。两个控制器中都有一个动作信息。现在我想将我的 URL 创建为

www.example.com/abc.html 而不是 www.example.com/vendor/info/v-name/abc.html www.example.com/xyz.html 而不是 www.example.com/product/info/p-name/xyz.html

v-name 和 p-name 是参数。

我把重写规则写成

'<v-name:\w+>'=>'vendor/info',
'<p-name:\w+>'=>'product/info',

但这似乎不起作用。由于第一条规则也适用于产品案例,最后抛出异常。应该怎么做?

非常感谢您的帮助。

【问题讨论】:

  • 您的createUrl 通话效果如何?
  • 我的 createUrl 看起来完全符合我的要求。像 www.example.com/abc.html 代码是 Yii::app()->createUrl('vendor/info', array('v-name'=> $vendor_info->url_name));
  • 尝试添加'vendor\/&lt;v-name:\w+&gt;' =&gt; 'vendor/info', 'product\/&lt;p-name:\w+&gt;'= &gt; 'product/info',
  • 我认为使用 .htaccess 规则会比 Yii URL 管理更好
  • 通过在参数与规则一起使用之前添加供应商和产品并且不会引发异常但链接更改为 [link](www.example.com/vendor/abc.html) @Justinas跨度>

标签: php yii url-rewriting


【解决方案1】:

我建议您使用更通用的规则:

'<controller:\w+>/<action:\w+>/name/<name:\w+>' => '<controller>/<action>'

name 属性将在您的操作中可用:

public function actionInfo() { $name = Yii::app()->request->getParam( 'name', 'defaultValue' ); }

【讨论】:

  • 在操作中获取参数值没有问题,但我面临的主要问题是通过编写规则,好像单击供应商的链接第一个规则已应用,参数正在正确但是当我单击产品链接,然后再次应用第一个规则并发生错误
  • 从系统的角度来看,两个 URL 是相同的 www.example.com/abc.html www.example.com/xyz.html 因为它们匹配相同的正则表达式 (\w+),所以它不会不知道,是产品还是供应商。
  • 是的,你是对的。但是 中的参数难道不能检测到系统的差异吗?
  • ''=>'vendor/info' - 这条规则的字面意思如下:任何匹配 \w+ 正则表达式的东西都应该由 'vendor/info' 操作处理并在那里传递包含与正则表达式匹配的所有内容的 v-name 参数。
  • 所以,回答你的问题,不,它不会区分它,它甚至不会搜索“v-name”字符串,它会创建一个命名参数并将其传递给处理程序。跨度>
【解决方案2】:

目前您的两个链接都表示check if url contains word。所以http://example.com/example 将没有产品或供应商的信息。由于您的供应商规则高于产品,因此每个 url 都匹配第一个规则并且不会进一步执行。您需要添加任何“标记”才能知道它是供应商还是产品。

'vendor\/<v-name:\w+>' => 'vendor/info',
'product\/<p-name:\w+>' => 'product/info',

但是是的,您的网址会改变。您仍然可以将 url 更改为 &lt;v-name:\w+&gt;\/v 之类的东西,并且 url 看起来像 http://www.example.com/some name of your vendor here/v

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多