流明(5.8.12)-带前缀的多个可选参数

问题描述 投票:0回答:1

我正在尝试创建这样的端点:

/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'
));
php routes lumen prefix optional-parameters
1个回答
0
投票

我认为无法直接执行此操作。路由匹配器非常严格。您也许可以作弊并声明路线的所有可能形式。

$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中(使用等效语法)进行了尝试,但是如果我正确阅读了文档,它应该可以工作。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.