【问题标题】:Lumen (5.8.12) - Multiple optional paramter with prefixLumen (5.8.12) - 带前缀的多个可选参数
【发布时间】:2019-10-14 15:14:43
【问题描述】:

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

/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】:

    我认为直接这样做是不可能的。路由匹配器非常严格。不过,您也许可以作弊并声明所有可能的路线化身。

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

    【讨论】:

    • 感谢您的回答。我阅读了有关路线的文档,但只发现只有一个 [可选] 参数的情况。我问是因为我很确定我在其他框架上做了同样的事情。
    猜你喜欢
    • 2019-07-06
    • 2020-07-01
    • 2018-01-08
    • 1970-01-01
    • 2019-03-11
    • 2013-01-24
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    相关资源
    最近更新 更多