NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
UdalosťKedyPayload
LifecycleTransitioningV transakcii, pred zápisom (listener, ktorý vyhodí výnimku, ho preruší).subject, lifecycle, transition, from, to, actor, system
LifecycleTransitionedPo 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
LifecycleTransitionDeniedPo vrátení zamietnutého pokusu (aj keď sa potom vráti vaša vlastná transakcia).subjectType, subjectId, lifecycle, transition, actor, denials
LifecycleExpiredPo commite, spolu s LifecycleTransitioned expirácie.subject, lifecycle, from, to, historyId, expiresAt
LifecycleExpiringPo commite, raz za každý predstih upozornenia.subject, lifecycle, state, expiresAt, lead, scheduleId
LifecycleRolledBackPo commite, raz za jedno volanie rollbacku.subject, lifecycle, from, to, revertedIds, rollbackIds, actor
LifecycleFrozen / LifecycleUnfrozenPo commite.subject, lifecycle, until, reason, actor
LifecycleAdoptedPo commite.subject, lifecycle, recordedState, actualState, historyId
ScheduledTransitionFailedPo 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 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.