yii2 UrlManager 的自定义rules的bug,无法以“/”结尾 [ 2.0 版本 ]
假如我想实现这样的,访问
'info/<type:(area|cat)>-<v1:\d+>-<v2:\d+>-<v3:\d+>/' => 'info/list',
,
我发现当我结尾加了那个 /,他会提示报错 404 NotFound。仔细跟踪代码,生成的匹配规则是:
#^info/(?P<type>(area|cat))-(?P<v1>\d+)-(?P<v2>\d+)-(?P<v3>\d+)/(?P<page>(\d+))$#u
,结尾的斜杠在 https://github.com/yiisoft/yii2/blob/master/framework/web/UrlRule.php#L194
这一行被强制去掉,如果我不要结尾的斜杠,就可以访问正常。
$this->pattern = '#^' . trim(strtr($this->_template, $tr), '/') . '$#u';
我现在需要实现的是必须以 / 斜杠结尾才可以访问。yii2却因为trim了两边的,应该改成 ltrim()
共 2 个回答
-
vincentguo 回答于 2016-09-21 10:54 举报
找到解决办法了,例如有条规则
'info/<type:(area|cat)>-<v1:\d+>-<v2:\d+>-<v3:\d+>/' => 'info/list'修改成
'info/<type:(area|cat)>-<v1:\d+>-<v2:\d+>-<v3:\d+>/?' => 'info/list',
修改源码有个不好的地方就是升级带来问题
vincentguo 觉得很赞 -
phptest
注册时间:2014-06-08
最后登录:2018-12-03
在线时长:9小时54分
最后登录:2018-12-03
在线时长:9小时54分
- 粉丝5
- 金钱118
- 威望0
- 积分208