【问题标题】:Yii URL Manger create a route with multi optional parametersYii URL Manger 创建一个带有多个可选参数的路由
【发布时间】:2018-06-12 17:31:58
【问题描述】:

我有一个带有多个可选参数的 URL 规则,它正在工作,但在我从 Yii 1.1.15 升级到 1.1.19 后它停止了。

const OPTIONAL_PARAMS = '(/<featured:featured>)?'
. '(/subType/<subType:.*?>)?'
. '(/type/<type:\d+>)?'
. '(/category/<category:.*>)?';


'<lang:(en|fr)>/reports'. OPTIONAL_PARAMS => 'reports',

任何人都可以给我一些想法或有人遇到过类似的问题?

附:其他 URL 管理器规则运行良好,只有带有 (SOME_CODE)? 可选参数的这条规则不起作用。我正在使用 PHP 5.6 和 Apache。

【问题讨论】:

  • 您是否尝试删除规则中的重复斜线(在reports - '&lt;lang:(en|fr)&gt;/reports' . OPTIONAL_PARAMS =&gt; 'reports', 之后)?
  • 您能否再描述一下,您所说的 stopp 是什么意思,它是显示空白页、incoreectpage 还是错误?
  • 它重定向到 404,如果删除问号并使参数不是可选的,则 URL 将起作用,是的,我已经删除了重复的斜杠
  • 到目前为止我发现了一个不同之处,旧站点运行的是 1.1.15 版本,而新站点运行的是 1.1.19
  • 我将 yii1.1.19 替换为 1.1.15 并且所有 url 现在都可以使用,但是我该如何解决这个问题并再次启用 1.1.19??

标签: php regex yii yii1.x


【解决方案1】:

您可能对this issue 感兴趣。但简而言之:这种语法(命名参数之外的正则表达式)从未得到官方支持,并且在 Yii 1.1.17 中作为错误修复被删除。

支持这个的最后一个版本是 1.1.16,但它真的太旧了,我不建议使用它。对于这种特殊情况,您可能应该创建自定义 UrlRule 并使用它而不是 CUrlRule


您也可以尝试在模式末尾添加/*,如下所示:

'<lang:(en|fr)>/reports/*' => 'reports',

这将允许将 GET 参数附加到 URL 为 /key/value。所以这个:

$this->createUrl('reports', [
    'type' => 'sometype', 
    'category' => 'somecategory',
    'lang' => 'en',
]);

将创建如下 URL:

/en/reports/type/sometype/category/somecategory

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 2017-03-03
    • 2015-06-12
    • 2014-12-07
    • 2013-06-08
    • 2019-03-11
    • 1970-01-01
    相关资源
    最近更新 更多