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

Laravel/Lumen route optional url query parametrers

在 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`