Yii URL 管理器创建一个带有多个可选参数的路由

Yii URL Manger create a route with multi optional parameters

我有一个带有多个可选参数的 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',

谁能给我一些想法或者有人遇到过类似的问题?

P.S。其他 URL 管理器规则工作正常,只有带有 (SOME_CODE)? 可选参数的这个规则不起作用。我正在使用 PHP 5.6 和 Apache。

您可能对 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