Laravel中间件跳过路由组

时间:2017-05-01 01:55:05

标签: php laravel

我们说我有以下路线文件:

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路线?

1 个答案:

答案 0 :(得分:0)

这不会起作用,因为您的foobar路线都是相同的:

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路由,这将是有效的。否则,只需重定向到您想要的任何路线。