Я экспериментирую с промежуточным программным обеспечением в своем приложении Laravel. В настоящее время я настроил его для работы на каждом маршруте для аутентифицированного пользователя, однако я хочу, чтобы он игнорировал любые запросы, начинающиеся с setup
URI.
Вот как выглядит мой 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
маршрут, который я создал.
Есть ли лучший способ запустить это промежуточное ПО на всех маршрутах для пользователя, но также установить определенные маршруты, которые должны быть исключены из этой проверки?