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