Lumen (5.8.12) - 带前缀的多个可选参数
Posted
技术标签:
【中文标题】Lumen (5.8.12) - 带前缀的多个可选参数【英文标题】:Lumen (5.8.12) - Multiple optional paramter with prefix 【发布时间】: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'
));
【问题讨论】:
【参考方案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 中(使用等效语法),但如果我正确阅读文档,它应该可以工作。
【讨论】:
感谢您的回答。我阅读了有关路线的文档,但只发现只有一个 [可选] 参数的情况。我问是因为我很确定我在其他框架上做了同样的事情。以上是关于Lumen (5.8.12) - 带前缀的多个可选参数的主要内容,如果未能解决你的问题,请参考以下文章