Я не думаю, что это возможно сделать напрямую. Маркер маршрута довольно строг. Вы можете обмануть и объявить все возможные воплощения маршрутов.
$callback = function (Request $request) {
$defaults = [
'language' => 'language/en',
'max' => 'max/10',
'page' => 'page/1'
];
$language = $request->route('language', $defaults['language']);
$max = $request->route('max', $defaults['max']);
$page = $request->route('page', $defaults['page']);
dd($language, $max, $page);
// Some string splitting may be required
};
$router->get('/most-popular',$callback);
$router->get('/most-popular/{page:page/\d+}',$callback);
$router->get('/most-popular/{max:max/\d+}',$callback);
$router->get('/most-popular/{language:language/\w+}',$callback);
$router->get('/most-popular/{language:language/\w+}/{max:max/\d+}',$callback);
$router->get('/most-popular/{language:language/\w+}/{page:page/\d+}',$callback);
$router->get('/most-popular/{max:max/\d+}/{page:page/\d+}',$callback);
$router->get('/most-popular/{language:language/\w+}/{max:max/\d+}/{page:page/\d+}',$callback);
По общему признанию, я на самом деле не пробовал это на Lumen, но в Laravel (используя эквивалентный синтаксис), но если я правильно читаю документы, это должно работать.