Middleware pre routy
Prístup k routám podmienite dokončením onboardingu cez middleware onboarding. Prihlásený subjekt s nedokončeným tokom sa presmeruje na aktuálny krok; dokončený alebo chýbajúci tok prejde ďalej. Hostia prejdú vždy — middleware onboarduje len prihláseného používateľa, preto pred neho dajte auth všade, kde treba hostí odmietnuť:
Route::middleware(['auth', 'onboarding'])->group(function () {
Route::get('/dashboard', DashboardController::class);
});
// pick a specific flow key
Route::middleware(['auth', 'onboarding:admin'])->get('/admin', AdminController::class);Voliteľný parameter určuje kľúč toku. Bez neho middleware číta ten istý tok ako $user->onboarding() — platí teda zaregistrovaný resolver a defaultOnboardingKey() ako náhrada; používateľ bez traitu GetsOnboarded dostane Onboarding::for($user).
Ciele krokov
Aby middleware mohol presmerovať, aktuálny krok musí mať cieľ. Pomenovanú routu nastavíte cez route() — aj s jej parametrami, ako pole alebo closure, ktorá dostane naviazaný subjekt —, absolútnu URL alebo cestu cez url():
Step::make('Complete profile')->route('profile.edit');
Step::make('Join a team')->route('teams.show', fn (?User $user) => ['team' => $user?->current_team_id]);
Step::make('Add billing')->url('/billing/setup?from=onboarding');Cieľ sa určuje v tomto poradí:
- route() — ak pomenovaná routa existuje.
- url() — absolútna URL alebo cesta.
- Voľné pole action() ako záloha — najprv ako názov routy, potom ako URL alebo cesta začínajúca http://, https:// alebo /. Jeho význam pre frontend sa nemení.
- Žiadny použiteľný cieľ — middleware požiadavku pustí ďalej.
Bez cyklenia
Ak je požiadavka už na cieli aktuálneho kroku — či je zadaný ako pomenovaná routa, absolútna URL alebo cesta — middleware ju pustí ďalej, takže obrazovka samotného kroku môže bezpečne patriť do chránenej skupiny:
// the step's own screen may sit inside the guarded group — it never loops
Route::middleware(['auth', 'onboarding'])->group(function () {
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::get('/dashboard', DashboardController::class)->name('dashboard');
});Ciele typu URL sa porovnávajú podľa hostiteľa a cesty, takže query string či #fragment v cieli ani aplikácia v podadresári nikdy nespôsobia cyklenie. Pomenovaná routa, ktorej chýbajú povinné parametre, sa nahlási (report()) a berie sa ako „žiadny cieľ“: požiadavka prejde ďalej namiesto chyby.
Vlastné presmerovanie
Onboarding::for($user)?->redirectToCurrentStep(); // ?RedirectResponse
$user->onboarding()?->redirectToCurrentStep(); // the same through the traitredirectToCurrentStep() vráti null, ak je tok dokončený alebo aktuálny krok nemá použiteľný cieľ, takže záložné presmerovanie doplníte ľahko:
public function __invoke(Request $request): RedirectResponse
{
return $request->user()->onboarding()?->redirectToCurrentStep()
?? redirect()->route('dashboard');
}Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.