Функция route() в Lumen с параметром маршрута regex возвращает ложный URL

В Lumen Micro Framework я создал простой маршрут с датой в качестве параметра (то есть: /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 ответ

Сейчас я просто буду использовать уродливое регулярное выражение, подобное этому {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}}', Он находит первую открытую скобку и останавливается на первой закрытой скобке.

Другие вопросы по тегам