我们说我有以下路线文件:
Route::group(['middleware' => 'foo.only'], function () {
Route::get('/', 'FooController@index');
Route::get('/about', 'FooController@about');
});
Route::get('/', 'BarController@index');
Route::get('/about', 'BarController@about');
在我的FooOnlyMiddleware处理程序中,我有类似的东西:
public function handle($request, $next)
{
if ($foo == true) {
return $next($request);
}
else {
// skip the entire route group and move onto the next route
}
}
如何执行此操作,以便$foo = false
它会跳过整个路线组并转到bar
路线?
答案 0 :(得分:0)
这不会起作用,因为您的foo
和bar
路线都是相同的:
Route::get('/', 'FooController@index');
Route::get('/', 'BarController@index');
永远不会达到bar
路线。
这是完成所需条件路线的一种方法:
您的路线:
Route::group(['middleware' => 'foo.only'], function () {
Route::get('/', 'FooController@index');
Route::get('/about', 'FooController@about');
});
Route::get('bar/', 'BarController@index');
Route::get('bar/about', 'BarController@about');
FooOnlyMiddleware:
public function handle($request, $next)
{
if ($foo == true) {
return $next($request);
}
else {
return redirect('/bar/'.$request->route()->uri());
}
}
当然,如果每个使用FooOnlyMiddleware的路由具有等效的bar
路由,这将是有效的。否则,只需重定向到您想要的任何路线。