2015-11-22 45 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); 
} 

整體思路,這打破,如果水平的一個不存在的,所以你可以在構建層次考慮到這一點。