Yii URL Manger创建具有多个可选参数的路由

时间:2018-06-12 17:31:59

标签: php regex yii yii1.x

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

1 个答案:

答案 0 :(得分:1)

您可能感兴趣this issue。但简而言之:这种语法(名称params之外的regexp)从未得到官方支持,并且在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',
]);

将创建如下的网址:

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