Lumen 中带有正则表达式路由参数的 route() 函数 return 为 false url
The route() function in Lumen with a regex route parameter return a false url
在 Lumen 微框架中,我创建了一个以日期为参数的简单路由(即:/2018-02-31)。
$router->get(
'{from:\d{4}(?:-\d{1,2}){2}}',
[
'as' => 'date',
function($from) use ($router) {
return $from;
// return route('date',['from' => $from]);
}
]
);
如果我 return $from,它将 return 日期为 2018-02-31。
但是,当我想 return 是带有 route() 函数的自己的路由时,它 returns /2018-02-31(?:-\d {1,2}){2}}
我尝试使用其他正则表达式来获取日期,例如 [0-9]{4}-[0-9]{2}-[0-9]{2}而且效果不佳。
现在,我将只使用像这样的丑陋的正则表达式 {from:[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]}
来获取日期。
不过我找到了崩溃的地方。
在文件 UrlGenerator.php 中定义了 route() 函数。
$uri = preg_replace_callback('/\{(.*?)(:.*?)?(\{[0-9,]+\})?\}/', function ($m) use (&$parameters) {
return isset($parameters[$m[1]]) ? array_pull($parameters, $m[1]) : $m[0];
}, $uri);
如您所见,它在 uri 中的两个括号之间搜索内容,所以对我来说 '{from:\d{4}(?:-\d{1,2}){2}}'
。它找到第一个打开的括号并在第一个关闭的括号处停止。
在 Lumen 微框架中,我创建了一个以日期为参数的简单路由(即:/2018-02-31)。
$router->get(
'{from:\d{4}(?:-\d{1,2}){2}}',
[
'as' => 'date',
function($from) use ($router) {
return $from;
// return route('date',['from' => $from]);
}
]
);
如果我 return $from,它将 return 日期为 2018-02-31。
但是,当我想 return 是带有 route() 函数的自己的路由时,它 returns /2018-02-31(?:-\d {1,2}){2}}
我尝试使用其他正则表达式来获取日期,例如 [0-9]{4}-[0-9]{2}-[0-9]{2}而且效果不佳。
现在,我将只使用像这样的丑陋的正则表达式 {from:[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]}
来获取日期。
不过我找到了崩溃的地方。
在文件 UrlGenerator.php 中定义了 route() 函数。
$uri = preg_replace_callback('/\{(.*?)(:.*?)?(\{[0-9,]+\})?\}/', function ($m) use (&$parameters) {
return isset($parameters[$m[1]]) ? array_pull($parameters, $m[1]) : $m[0];
}, $uri);
如您所见,它在 uri 中的两个括号之间搜索内容,所以对我来说 '{from:\d{4}(?:-\d{1,2}){2}}'
。它找到第一个打开的括号并在第一个关闭的括号处停止。