在 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] 删除。
我来说两句