2015-11-22 31 views
2

我在努力获得下面的代码工作。我能够达到1级,但绑定级别2/3/4是我无法工作的。laravel在routeserviceprovider中绑定多个参数

我有这样的路线:

Route::get('/profile/{level1}/{level2?}/{level3?}/{level4?}', '[email protected]'); 

在我RouteServiceProvider我有这样的结合:

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

在我的控制,我有这个功能

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

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

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

回答

0

斜线可以是参数的一部分,把事情简单化

Route::get('/profile/{levels}', '[email protected]') 
    ->where('levels', '.+'); 

$router->bind('levels', function($test){ 
    dd(explode('/', $test)); 
}); 

如果所有4个级别必须存在,你可以试试这个未经测试的正则表达式:

Route::get('/profile/{levels}', '[email protected]') 
    ->where('levels', '([^/]+\/){3}[^/]+'); 
0

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

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

整体思路,这打破,如果水平的一个不存在的,所以你可以在构建层次考虑到这一点。