Laravel/Lumen 路由可选的 url 查询参数

szatti1489

在 Lumen 中,我必须将 url 第一段作为 $source 属性,将所有其他部分作为 $path。是这样解决的:

Route::get('/{source}/{path:.*}', 'HomeController@index');

这样 /database/path/to/folder URL 将被解析为$source = 'database';$path = 'path/to/folder';这太棒了!

但是当我也有可选的查询参数时,例如: /database/path/to/folder?attr1=foo&attr2=bar

如何定义以获取属性中的整个查询部分作为路由参数?

陈亮

由于它们是可选的并且是查询字符串,因此您不必在路由注册中定义它们。

您可以在生成 url 时简单地传递它们。例如:

Route::get('/{source}/{path:.*}', [
    'as' => 'home',
    'uses' => 'HomeController@index'
]);

那么你可以这样做:

route('home', [
    'source' => 'database',
    'path' => 'path/to/folder',
    'attr1' => 'foo',
    'attr2' => 'bar'
]);

输出将是:

http://example.com/database/path/to/folder?attr1=foo&attr2=bar

更新

由于您想将所有内容放入路由参数中,您可以像这样实现:

Route::get('{source}/{path:[a-z0-9/]+}[/{query:[a-z0-9=&]+}]', [
    'as' => 'home',
    'uses' => 'HomeController@index'
]);

然后你会生成这样的路线:

route('home', [
    'source' => 'database',
    'path' => 'path/to/folder',
    'query' => 'attr1=foo&attr2=bar'
]);

输出将是:

http://example.com/database/path/to/folder/attr1=foo&attr2=bar`

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章