【问题标题】:Laravel 8 and Multiple Optional ParametersLaravel 8 和多个可选参数
【发布时间】:2021-11-02 01:16:47
【问题描述】:

我想使用 Laravel 8 创建一个允许多个可选参数的路由。例如,如果此路线显示人员列表,则可能类似于以下任何内容:

  • /人
  • /people/age/24
  • /人/头发/棕色/年龄/30
  • /people/status/4

或者如果这样更简单:

  • /人
  • /people/age-24
  • /people/hair-brown/age-30
  • /people/status-4

参数都是可选的。顺序应该无关紧要。如果可能的话,我想在不使用控制器的情况下做到这一点。

谢谢!

【问题讨论】:

    标签: php laravel laravel-8 laravel-routing


    【解决方案1】:

    您可以使用Encoded Forward Slashes。使用where 条件正则表达式(.*):

    # http://myapp.test/people/hair/brown/age/30
    
    Route::get('people/{search?}', function ($search = null) {
    
        // Your logic here..
    
        dd($search); // hair/brown/age/30
    
    })->where('search', '.*');
    

    如果你想将$search 解析成一个数组,你可以用它来查询你的模型,你可以这样使用:

    Route::get('people/{search?}', function ($search = null) {
    
        $search = trim(preg_replace('|/?([^/]+)/([^/]+)|', '$1=$2&', $search), '&');
        parse_str($search, $query);
        $query = array_filter($query); // To prevent elements that have no value
    
        dd($query);
    
    })->where('search', '.*');
    
    • /people/hair/brown/age/30
    • /people/hair/brown/age/30/key-with-no-value

    结果:

    [
      "hair" => "brown",
      "age"  => "24"
    ]
    

    【讨论】:

    • 我也不建议您使用/people/hair-brown/age-30 格式。因为如果键或值有-,将很难解析-
    • 非常感谢@WahyuKristianto!我比我在询问之前找到的任何解决方案都更喜欢这个!
    • 很高兴为您提供帮助
    猜你喜欢
    • 2015-08-07
    • 2014-06-30
    • 2017-09-30
    • 2014-05-04
    • 2021-12-05
    • 2013-02-14
    • 1970-01-01
    • 2018-06-23
    • 2017-09-02
    相关资源
    最近更新 更多