流明中带有正则表达式route参数的route()函数返回错误的url

时间:2018-08-22 12:17:01

标签: php regex lumen lumen-routing

在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]);
        }
    ]
);

如果我返回$ from,它将返回日期为2018-02-31。

但是,当我想使用route()函数返回自己的路线时,它将返回 / 2018-02-31(?:-\ d {1,2}){2}}

我尝试过使用其他正则表达式作为日期,例如 [0-9] {4}-[0-9] {2}-[0-9] {2} ,但没有也可以。

1 个答案:

答案 0 :(得分:0)

现在,我将仅使用像这样的{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}}'。它找到第一个打开的括号,并停在第一个闭合的括号。