Deklaratívne podmienky
Na bežné prípady closure nepotrebujete. Tieto pomocníky prečítajú hodnotu z naviazaného subjektu a skompilujú sa do rovnakých pravidiel completeIf / excludeIf, takže znesú subjekt null a zostávajú úplne bezstavové:
Step::make('Upload photo')->completeWhenFilled('avatar_path'); // filled() on the attribute (dot paths supported)
Step::make('Verify email')->completeWhenTrue('email_verified_at'); // truthy attribute, or a no-arg method
Step::make('Invite team')->completeWhenHas('teams'); // a non-empty relation value, collection, or array| Metóda | Účel |
|---|---|
completeWhenFilled($attribute) | filled() na atribúte; podporuje bodkové cesty. |
completeWhenTrue($attributeOrMethod) | Výsledok metódy bez argumentov, inak atribút, je pravdivý. |
completeWhenHas($relation) | Hodnota relácie je model, neprázdna kolekcia či pole, alebo akákoľvek hodnota okrem null. |
excludeWhenFilled($attribute) | Kontrola z completeWhenFilled() použitá na vylúčenie. |
excludeWhenTrue($attributeOrMethod) | Kontrola z completeWhenTrue() použitá na vylúčenie. |
excludeWhenHas($relation) | Kontrola z completeWhenHas() použitá na vylúčenie. |
Pri subjekte null vráti každý pomocník false — krok nie je dokončený ani vylúčený.
Metóda má prednosť pred atribútom
completeWhenTrue() uprednostní metódu bez argumentov s daným názvom pred atribútom. Metóda, ktorá vyžaduje argumenty, sa nezavolá a berie sa ako prázdna hodnota:
// A no-arg method wins over an attribute of the same name
Step::make('Subscribe')->completeWhenTrue('hasSubscription'); // calls $subject->hasSubscription()Relácie nikdy nespúšťajú dotaz
completeWhenHas() skontroluje už načítanú alebo lenivo načítanú hodnotu relácie — ->exists() za vás nespustí, pretože by to predpokladalo Eloquent. Ak potrebujete explicitný dotaz, oprite completeWhenTrue() o metódu modelu alebo použite closure:
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Onboarding\Traits\GetsOnboarded;
class User extends Model
{
use GetsOnboarded;
public function hasTeam(): bool
{
return $this->teams()->exists();
}
}
// completeWhenHas() never queries — back an explicit query with a method
Step::make('Invite team')->completeWhenTrue('hasTeam');Vylúčenie
Rovnaká sada existuje aj na strane vylúčenia. Vylúčený krok zmizne pre daný subjekt zo steps(), z percent aj z dokončenia — každý vidí len to, čo sa ho týka:
Step::make('Connect billing')->excludeWhenTrue('is_free_plan'); // hidden for free-plan users
Step::make('Upload photo')->excludeWhenFilled('social_avatar_url'); // already has an avatar elsewhere
Step::make('Create workspace')->excludeWhenHas('workspaces'); // joined an existing workspacecompleteWhen() a excludeWhen() sú aliasy completeIf() a excludeIf() pre jednotný štýl pomenovania:
Step::make('Verify email')->completeWhen(fn (?User $user) => $user?->hasVerifiedEmail());
Step::make('Connect billing')->excludeWhen(fn (?User $user) => $user?->is_guest);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.