Php laravel绑定routeserviceprovider中的多个参数

Php laravel绑定routeserviceprovider中的多个参数,php,laravel,laravel-5,laravel-routing,Php,Laravel,Laravel 5,Laravel Routing,我正在努力让下面的代码正常工作。我可以达到1级,但绑定2/3/4级是我无法实现的 我有这条路线: Route::get('/profile/{level1}/{level2?}/{level3?}/{level4?}', 'TestController@tester'); 在我的RouteServiceProvider中,我有以下绑定: $router->bind('level1', function($test){ return \App\urlSlugs::where('sl

我正在努力让下面的代码正常工作。我可以达到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添加到绑定中。它们是可选的,应该绑定,以便我可以在函数中使用它们


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

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

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);
}

如果其中一个级别不存在,那么整个想法就会中断,因此您可以在构建级别时将其考虑在内。

斜线可以作为参数的一部分,以简化操作

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}[^/]+');