Функция 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 (: -? \ Д {1,2}) {2}}

Я пытался с другим регулярным выражением для даты, как [0-9] {4} — [0-9] {2} — [0-9] {2} и это не работает так же хорошо.

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]