NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Lifecycle for Laravel

Overenie pred akciou

Zistite, či by bol prechod povolený — pre tlačidlá, menu aj nápovedy v API:

Lifecycles::for($listing)->by($user)->can('close');                         // bool
Lifecycles::for($listing)->by($user)->canTransitionTo(ListingStatus::Closed);

$decision = Lifecycles::for($listing)->by($user)->check('reopen');
$decision->allowed;          // false
$decision->codes();          // ['max_occurrences_reached']
$decision->messages();       // ['"Reopen" can be performed at most 3 times.']
$decision->retryAfter;       // a CarbonImmutable when every denial is temporary, else null

foreach (Lifecycles::for($listing)->by($user)->allowedTransitions(includeDenied: true) as $transition) {
    $transition->name;            // 'close'
    $transition->allowed;         // true/false
    $transition->denials;         // list<Denial> when refused
    $transition->requiresReason;  // show a reason field
    $transition->payloadFields;   // keys of its rules()
    $transition->availableAt;     // when a time-based denial lifts
}

Lifecycles::for($listing)->allowedStates();   // states reachable right now

Decision, Denial a AvailableTransition

  • Decision — allowed, denials a retryAfter (CarbonImmutable, ak sú všetky zamietnutia dočasné, inak null), plus denied(), has($code), find($code), first(), codes(), messages(), isRetryable() a toArray().
  • Denial — code, preložená message, params, retryAfter, errors (chyby validácie payloadu podľa kľúča) a source. Kódy sú hodnoty enumu DenialCode (frozen, quota_exceeded, rate_limited, …) alebo vlastné kódy vašich guardov.
  • AvailableTransition — name, label, to, toLabel, allowed, denials, requiresReason, payloadFields, availableAt (kedy pominie časové zamietnutie) a meta.

check() je len informatívne

check() spúšťa tú istú pipeline ako apply(), no apply() všetko overí znova pod zámkom riadku — medzitým môže konať niekto iný. Soft-deleted subjekt kontroly zamietnu so subject_trashed; apply() a rollback() preň vyhodia SubjectTrashedException. Pri subjekte, ktorý ešte nemá záznam stavu (alebo má drift), počíta check() minimálny čas v stave aj zapečatenie od teraz — rovnako ako adopcia v apply(). Bez dôvodu či payloadu hlásia check(), can() aj allowedTransitions() požiadavku na dôvod cez requiresReason / payloadFields, nie ako zamietnutie, takže tlačidlo prechodu, ktorý dôvod vyžaduje, sa nezobrazí ako neaktívne.

Čítanie z handlu

$handle = Lifecycles::for($listing);

$handle->state();                // the model's attribute as loaded (an enum case or a string)
$handle->effectiveState();       // the expiry target once expires_at has passed
$handle->is(ListingStatus::Active, ListingStatus::Closed);
$handle->isTerminal();
$handle->enteredAt();            // ?CarbonImmutable
$handle->version();              // 0 before the first record exists
$handle->definition();           // CompiledDefinition
$handle->isFrozen();  $handle->frozenUntil();  $handle->frozenReason();
$handle->scheduled();            // list<ScheduledTransition>
$handle->expiresAt();  $handle->isExpired();  $handle->isInGrace();  $handle->isExpiringWithin('3 days');
$handle->history();  $handle->lastTransition();

state() je atribút modelu tak, ako je načítaný — bez opätovného čítania z databázy (na to model znova načítajte) a bez vplyvu oneskorenej expirácie; effectiveState() je stav, aký bude po spustení oneskorenej expirácie, ešte predtým, než prebehne sweep.

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 kryptomien

Odoslaní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.