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