将中间件应用于除 Laravel 5.4 中的“setup/*”之外的所有路由
2022-08-30 22:51:58
我正在我的Laravel应用程序中试验中间件。我目前已将其设置为在经过身份验证的用户的每个路由上运行,但是,我希望它忽略以URI开头的任何请求。setup
以下是我的中间件方法:CheckOnboarding
public function handle($request, Closure $next)
{
/**
* Check to see if the user has completed the onboarding, if not redirect.
* Also checks that the requested URI isn't the setup route to ensure there isn't a redirect loop.
*/
if ($request->user()->onboarding_complete == false && $request->path() != 'setup') {
return redirect('setup');
} else {
return $next($request);
}
}
这在我的路由中使用,如下所示:
Route::group(['middleware' => ['auth','checkOnboarding']], function () {
Route::get('/home', 'HomeController@index');
Route::get('/account', 'AccountController@index');
Route::group(['prefix' => 'setup'], function () {
Route::get('/', 'OnboardingController@index')->name('setup');
Route::post('/settings', 'SettingsController@store');
});
});
现在,如果我去或我被重定向到你期望的。这最初导致了重定向循环错误,因此为什么在中间件中。/home
/account
/setup
& $request->path() != 'setup'
我觉得这是一种非常笨拙的方式,显然与我创建的路线不匹配。setup
setup/settings
有没有更好的方法让这个中间件在用户的所有路由上运行,同时也设置某些应该免除此检查的路由?