Definovanie krokov
Step je jedna úloha onboardingu. Je dokončený, pokiaľ pravidlo completeIf neurčí inak, a nikdy nie je vylúčený, pokiaľ to neurčí pravidlo excludeIf. Obe closures dostanú subjekt naviazaný na tok — alebo null, ak žiadny nie je:
use App\Models\User;
use RoundlyConsulting\Onboarding\Step;
Step::make('Verify email')
->cta('Resend verification')
->action('verification.notice')
->meta(['icon' => 'mail'])
->completeIf(fn (?User $user) => $user?->hasVerifiedEmail())
->excludeIf(fn (?User $user) => $user?->is_guest);Metódy buildera
| Metóda | Účel |
|---|---|
title(?string) | Zobrazovaný názov; môže byť prekladový kľúč. |
cta(?string) | Text výzvy na akciu; môže byť prekladový kľúč. |
action(?string) | Voľný pokyn pre frontend; zároveň záložný cieľ presmerovania. |
route(?string $name, array|Closure $parameters = []) | Pomenovaná routa, na ktorú middleware presmeruje, s jej parametrami — pole alebo closure, ktorá dostane naviazaný subjekt. |
url(?string) | Absolútna URL alebo cesta, na ktorú middleware presmeruje. |
meta(array) | Ľubovoľné metadáta, ktoré sa prenesú do DTO. |
key(?string) | Stabilný identifikátor; inak slug z názvu. |
order(?int) | Explicitné poradie v rámci toku. |
group(?string) | Kľúč sekcie pre zoskupený postup. |
optional(bool = true) | Usmerňuje používateľa bez blokovania dokončenia. |
required() | Znova označí krok ako povinný (predvolený stav). |
translatable(?bool = true) | Vynúti (true), vypne (false) alebo automaticky rozpozná (null) preklad názvu a CTA. |
dismissible(bool = true) | Umožní používateľovi skryť voliteľný krok (vyžaduje store). |
completeIf(?Closure) / completeWhen() | Pravidlo dokončenia; dostane subjekt alebo null. |
excludeIf(?Closure) / excludeWhen() | Pravidlo vylúčenia; dostane subjekt alebo null. |
for($subject) | Naviaže subjekt — tok to urobí za vás. |
Každá vlastnosť buildera je zároveň pomenovaným argumentom Step::make() (aj konštruktora), takže krok nadefinujete jediným volaním:
// Every builder property is also a named argument of Step::make()
Step::make(
title: 'Add a bio',
cta: 'Write your bio',
key: 'bio',
optional: true,
group: 'profile',
route: 'profile.bio',
);Kľúče
Každý krok má stabilný kľúč — nastavíte ho cez key(), inak sa odvodí ako slug z názvu. Pevný kľúč prežije preformulovanie aj preklad, takže frontend, udalosti aj testy sa na krok spoľahlivo odkážu. step() a hasStep() hľadajú len medzi viditeľnými krokmi:
Step::make('Upload Photo')->stepKey(); // 'upload-photo' — slugged from the title
Step::make('Upload Photo')->key('photo')->stepKey(); // 'photo' — explicit key wins
$flow->step('photo')?->isCompleted(); // look a visible step up by key
$flow->hasStep('photo'); // boolPoradie
Kroky predvolene zachovávajú poradie pridania. Ak ktorémukoľvek kroku nastavíte order(), tok ich podľa neho zoradí; kroky bez poradia potom nasledujú za zoradenými:
Step::make('Verify email')->order(1);
Step::make('Upload photo')->order(2);Predikáty a čítanie
$step->isCompleted(); // true when no completeIf rule is set
$step->isNotCompleted();
$step->isExcluded(); // false when no excludeIf rule is set
$step->isNotExcluded();
$step->isOptional();
$step->isRequired();
$step->isDismissible();
$step->isDismissed(); // reads the manager's store; false without one
$step->completedAt(); // ?DateTimeInterface from the manager's store; null without one
$step->stepKey(); // explicit key, or a slug of the title
$step->groupName(); // ?string
$step->routeParameters(); // array — the named route's parameters, resolved against the subject
$step->resolvedTitle(); // ?string — translation keys resolved
$step->resolvedCta(); // ?stringKrok získaný cez tok — steps(), all(), step(), currentStep() — je už naviazaný na subjekt toku, takže jeho predikáty odpovedajú pre tento subjekt.
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.