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