0

在 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},但效果不佳。

4

1 回答 1

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}}'。它找到第一个打开的括号并在第一个关闭的括号处停止。

于 2018-08-22T15:36:57.763 回答