【问题标题】:laravel bind multiple parameters in routeserviceproviderlaravel 在 routeserviceprovider 中绑定多个参数
【发布时间】:2016-02-24 15:45:28
【问题描述】:

我正在努力让下面的代码正常工作。我能够达到 1 级,但绑定 2/3/4 级是我无法工作的东西。

我有这条路线:

Route::get('/profile/{level1}/{level2?}/{level3?}/{level4?}', 'TestController@tester');

在我的 RouteServiceProvider 中,我有这个绑定:

$router->bind('level1', function($test){
    return \App\urlSlugs::where('slug', $test)->get();         
});

在我的控制器中我有这个功能

public function tester($stuff){
    return $stuff;
}

现在,我不明白如何将 level2/3/4 添加到绑定中。它们是可选的,它应该绑定以便我可以在函数中使用它们。

需要所有级别来检索正确的对象(稍后我必须扩展实际绑定)。它们与其他对象无关(它是 1 个单一对象)。

【问题讨论】:

    标签: php laravel laravel-5 laravel-routing


    【解决方案1】:

    好的,这有点棘手。但是您可以使用渐进式绑定。检查如下内容:

    public function boot(Router $router)
    {
        //
        $router->bind('level1', function($test) use ($router){
            $router->bind('level2', function($test1) use ($test,$router){
              $router->bind('level3', function($test2) use ($test,$test1,$router){
                echo $test.' '.$test1.' '.$test2;
              });             
            });
        });
        parent::boot($router);
    }
    

    如果其中一个关卡不存在,整个想法就会中断,因此您可以在构建关卡时考虑到这一点。

    【讨论】:

      【解决方案2】:

      斜线可以作为参数的一部分来简化事情

      Route::get('/profile/{levels}', 'TestController@tester')
          ->where('levels', '.+');
      
      $router->bind('levels', function($test){
          dd(explode('/', $test));
      });
      

      如果所有 4 个级别都需要存在,您可以尝试这个未经测试的正则表达式:

      Route::get('/profile/{levels}', 'TestController@tester')
          ->where('levels', '([^/]+\/){3}[^/]+');
      

      【讨论】:

        猜你喜欢
        • 2018-12-12
        • 2019-03-10
        • 2017-01-10
        • 2017-07-22
        • 2015-05-23
        • 1970-01-01
        • 2016-09-30
        • 2019-08-20
        • 1970-01-01
        相关资源
        最近更新 更多