【问题标题】:Laravel/Lumen route optional url query parametrersLaravel/Lumen 路由可选 url 查询参数
【发布时间】:2020-02-09 01:44:58
【问题描述】:

在 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

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

【问题讨论】:

    标签: laravel parameters routing lumen


    【解决方案1】:

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

    您可以在生成 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`
    

    【讨论】:

    • 谢谢@chin,这会很棒,但在我的情况下,所有参数都可以是任何东西。我必须动态地找出它们。他们的名字和编号也可以是任何东西。
    • @szatti1489 是什么意思?问题出在哪里?
    • 问题是我不知道名字也不知道确切的数字。这就是为什么我会将整个查询部分放入一个能够在 php 中解析的变量。
    • @szatti1489 请看看我更新的答案:)
    • 非常感谢,看起来好多了!我的最后一个问题是我不能在路由中使用where() 方法,因为我实际上使用的是 Lumen。您是否知道如何将可选查询部分与可选路径部分分开?它可能是这样的,但由于 ?标记:Route::get('/{source}/{path:.*}?{query:.*}', 'HomeController@index');
    猜你喜欢
    • 2015-02-05
    • 1970-01-01
    • 2019-07-06
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多