Lumen (5.8.12) - несколько необязательных параметров с префиксом - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь создать конечную точку следующим образом:

/most-popular/language/{language}[/max/{max}[/page/{page}]]

Это прекрасно работает, если я создаю два отдельных маршрута:

/most-popular/language/en/max/10
/most-popular/language/en/max/10/page/2

Но я не могу сделать это:

/most-popular/language/en/page/2

Как настроить маршрут, чтобы можно было использовать несколько дополнительных параметров на основе префикса?

$router->get(
    '/most-popular/language/{language}[/max/{max}[/page/{page}]]', array(
    'as' => 'most-popular',
    'uses' => 'MyController@myMethod'
));

1 Ответ

2 голосов
/ 14 октября 2019

Я не думаю, что это возможно сделать напрямую. Маркер маршрута довольно строг. Вы можете обмануть и объявить все возможные воплощения маршрутов.

$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 (используя эквивалентный синтаксис), но если я правильно читаю документы, это должно работать.

...