laravel 在routeserviceprovider中绑定多个参数
laravel bind multiple parameters in routeserviceprovider
我正在努力让下面的代码正常工作。我能够达到 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 个单个对象)。
好的,这有点棘手。但是您可以使用渐进式绑定。检查如下内容:
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}[^/]+');
我正在努力让下面的代码正常工作。我能够达到 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 个单个对象)。
好的,这有点棘手。但是您可以使用渐进式绑定。检查如下内容:
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}[^/]+');