| Udalosť | Kedy | Payload |
|---|---|---|
LifecycleTransitioning | V transakcii, pred zápisom (listener, ktorý vyhodí výnimku, ho preruší). | subject, lifecycle, transition, from, to, actor, system |
LifecycleTransitioned | Po commite, raz pri každej zmene stavu: druhy transition, expiry, scheduled, rollback, adopted. | subject, subjectType, subjectId, lifecycle, kind, transition, from, to, actor, system, historyId, version |
LifecycleTransitionDenied | Po vrátení zamietnutého pokusu (aj keď sa potom vráti vaša vlastná transakcia). | subjectType, subjectId, lifecycle, transition, actor, denials |
LifecycleExpired | Po commite, spolu s LifecycleTransitioned expirácie. | subject, lifecycle, from, to, historyId, expiresAt |
LifecycleExpiring | Po commite, raz za každý predstih upozornenia. | subject, lifecycle, state, expiresAt, lead, scheduleId |
LifecycleRolledBack | Po commite, raz za jedno volanie rollbacku. | subject, lifecycle, from, to, revertedIds, rollbackIds, actor |
LifecycleFrozen / LifecycleUnfrozen | Po commite. | subject, lifecycle, until, reason, actor |
LifecycleAdopted | Po commite. | subject, lifecycle, recordedState, actualState, historyId |
ScheduledTransitionFailed | Po commite. | scheduleId, subjectType, subjectId, lifecycle, transition, denials, attempts, final |
Počúvajte LifecycleTransitioned, nie updated z Eloquentu: zápis stavu je priamy compare-and-swap, takže udalosti modelu sa preň neodošlú. Pokrýva každú zmenu stavu — prechody, expirácie, naplánované behy, kroky rollbacku aj adopcie — no nie vytvorenie, pri ktorom signálom je udalosť created vášho modelu a riadok histórie initial:
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Lifecycle\Enums\TransitionKind;
use RoundlyConsulting\Lifecycle\Events\LifecycleTransitioned;
Event::listen(function (LifecycleTransitioned $event): void {
if ($event->subject instanceof Listing && $event->to === ListingStatus::Active) {
SearchIndex::add($event->subject);
}
if ($event->kind === TransitionKind::Rollback) {
AuditLog::record("Rolled back to {$event->to->value}", $event->historyId);
}
});- LifecycleTransitioning beží v transakcii; listener, ktorý vyhodí výnimku, ju preruší a všetko vráti, no zamietnutia patria do guardov. Opakovanie po deadlocku ho spustí znova.
- LifecycleTransitionDenied zámerne nie je po commite — odošle sa, aj keď sa vaša vonkajšia transakcia kvôli zamietnutiu vráti.
- Udalosti po commite vo vašej vlastnej transakcii čakajú, kým sa potvrdí vaša vonkajšia transakcia, a pri jej vrátení sa zahodia.
- Udalosti nikdy nenesú payload prechodu. Ak potrebujete uložený, zvalidovaný kontext, prečítajte riadok histórie (historyId).
- Frontované listenery by si mali subjekt znova načítať podľa subjectType / subjectId.
- Idempotentné opakovania a Lifecycles::fake() neodošlú nič.
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.