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

Fasáda Lifecycles

Všetko ide cez jednu fasádu, RoundlyConsulting\Lifecycle\Facades\Lifecycles (zaregistrovanú aj ako globálny alias Lifecycles). for($model) vráti handle na jeden cyklus jedného subjektu, model() pracuje s triedou modelu, definitions() a schedules() združujú operácie s definíciami a plánmi a niekoľko plochých slovies spúšťa úlohy pre celý balík:

use RoundlyConsulting\Lifecycle\Facades\Lifecycles;

// A handle per subject (and lifecycle), carrying the call's context
Lifecycles::for($listing)->by($user)->because('Back in stock')->apply('reopen');
Lifecycles::for($order, 'payment_status')->apply('authorize');

// Ask before acting
Lifecycles::for($listing)->by($user)->can('close');

// Time: schedules, expiry and freezes
Lifecycles::for($listing)->by($editor)->schedule('publish', $publishAt);
Lifecycles::for($listing)->renew();
Lifecycles::for($listing)->by($moderator)->because('Under review')->freeze(until: now()->addDays(3));

// Undo
Lifecycles::for($listing)->by($user)->rollback();

// Model-level helpers, definitions, schedules and the sweep
Lifecycles::model(Listing::class)->graph();
Lifecycles::definitions()->validate(ListingLifecycle::class);
Lifecycles::schedules()->due();
Lifecycles::sweep();

// Deliberate direct writes, adopted at once
Lifecycles::allowDirectWrites(fn () => $listing->update(['status' => ListingStatus::Closed]));

Ploché metódy

MetódaVraciaČo robí
for($model, ?$lifecycle)LifecycleHandleHandle na jeden cyklus subjektu (prvý deklarovaný, ak žiadny neuvediete).
model(Model::class, ?$lifecycle)ModelLifecyclePomocníci na úrovni triedy: stavy, počiatočný a koncové stavy, prechody, graf, hromadná adopcia.
definitions()DefinitionsAccessorSkompilované definície, validácia, grafy a nakonfigurované subjekty.
schedules()SchedulesAccessorSpustí splatné plány, pošle upozornenia, vypíše splatné plány, zopakuje zlyhaný plán.
sweep(?$limit, ?$queue, ?$connection)SweepResultUpozornenia, potom všetky splatné expirácie a plány — to isté ako lifecycle:sweep. Null pre queue sa riadi schedules.queue.enabled; null pre connection spracuje predvolené databázové pripojenie.
prune(PruneOptions)PruneResultZmaže staré riadky histórie a dokončené plány.
adopt($model, ?$lifecycle) / adoptAll(Model::class, ?$lifecycle, $chunk, $scheduleExpiry)bool / intZosúladí jeden subjekt alebo všetky riadky modelu s uloženým stavom.
allowDirectWrites(fn () => …)mixedSpustí kód, ktorý zapisuje atribúty cyklu priamo; zmena sa pri uložení prevezme.
fake()LifecycleFakeVymení manažéra za nahrávací fake (pozri Testovanie).
apply(TransitionRequest), check(), rollback(RollbackRequest), …—Vrstva s request DTO — pozri DI a akcie.

Handle for($model)

Lifecycles::for($model, ?$lifecycle) vráti nemenný LifecycleHandle; null vyberie prvý cyklus z lifecycleDefinitions(). Každá kontextová metóda vráti nový handle, takže handle môžete bezpečne zdieľať. Model, ktorý nie je LifecycleSubject, vyhodí UnknownLifecycleException a rovnako aj nedeklarovaný cyklus.

MetódaVraciaČo robí
by(?$actor), asSystem(), because(?$reason), with(array $payload), expectingVersion(int), idempotencyKey(string)LifecycleHandleKontext pre ďalšie volania — každá vráti nový handle; platí posledné z by() / asSystem().
apply($transition) / transitionTo($state)TransitionResultAplikuje podľa názvu alebo jediný prechod do cieľového stavu. Vyhodí TransitionDeniedException.
attempt($transition)TransitionAttemptAko apply(), no zamietnutie vráti namiesto vyhodenia.
can($transition) / canTransitionTo($state)boolBolo by to teraz povolené?
check($transition) / checkTransitionTo($state)DecisionÚplné, informatívne rozhodnutie so všetkými zamietnutiami.
allowedTransitions(includeDenied: false) / allowedStates()listObjekty AvailableTransition (s includeDenied aj zamietnuté) alebo dosiahnuteľné stavy.
state() / effectiveState() / is(...$states) / isTerminal()state / boolAtribút modelu tak, ako je načítaný (bez opätovného čítania z databázy), stav po spustení oneskorenej expirácie, príslušnosť, koncovosť.
enteredAt() / version() / definition()?CarbonImmutable / int / CompiledDefinitionČas vstupu do aktuálneho stavu, verzia záznamu, skompilovaná definícia.
history($limit = 50) / lastTransition()Collection / ?TransitionRecordRiadky histórie, najnovšie prvé.
rollback(force: false) / rollbackTo($record, force: false)RollbackResultVráti posledný prechod alebo všetko po riadku histórie — všetko alebo nič.
canRollback() / canRollbackTo($record)DecisionBol by rollback teraz povolený?
freeze(until: null) / unfreeze() / isFrozen() / frozenUntil() / frozenReason()bool / …Zmrazí tento cyklus (zaznamená sa dôvod a aktér handlu) a prečíta zmrazenie.
schedule($transition, $at) / cancelScheduled($transition) / scheduled()ScheduledTransition / bool / listSpustí prechod neskôr, zruší ho, vypíše otvorené plány.
retryScheduled($transition)boolVráti najnovší zlyhaný plán prechodu tohto subjektu späť medzi čakajúce (expiráciu podľa jej expiračného prechodu), na pripojení subjektu.
expiresAt() / isExpired() / isInGrace() / isExpiringWithin($interval)?CarbonImmutable / boolČítanie čakajúcej expirácie.
expireAt($at) / extend($by) / renew(?$for) / neverExpire()CarbonImmutable / boolZmena expirácie aktuálneho pobytu v stave.
adopt()boolZosúladí tento subjekt s uloženým stavom hneď.

Lifecycles::model()

Pomocníci na úrovni triedy pre jeden cyklus modelu:

MetódaVraciaČo robí
definition()CompiledDefinitionSkompilovaná definícia.
states() / initial() / terminal()list / state / listDeklarované, počiatočný a koncové stavy.
transitions()list<TransitionDefinition>Všetky prechody v poradí deklarácie.
graph(?GraphFormat)stringDiagram v Mermaid alebo DOT.
adopt(chunk: 500, scheduleExpiry: true)intZosúladí všetky riadky modelu; vráti počet zmenených (= lifecycle:adopt).

Lifecycles::definitions()

MetódaVraciaČo robí
get($definitionClass)CompiledDefinitionSkompiluje (raz za proces) a vráti definíciu.
of($model, ?$lifecycle)CompiledDefinitionDefinícia za cyklom modelu.
validate($definitionClass)ValidationReportisValid(), errors(), warnings() — bez vyhodenia výnimky.
graph($definitionClass, ?GraphFormat)stringDiagram v Mermaid alebo DOT.
subjects() / registered()listconfig('lifecycle.subjects') a definície za nimi.
flush()voidZahodí skompilované definície (testy, ktoré cyklus predefinujú).

Lifecycles::schedules()

MetódaVraciaČo robí
runDue(?$limit, ?$queue, ?$connection)SweepResultSpustí splatné plány, bez upozornení.
warn(?$limit, ?$connection)intPošle splatné upozornenia na expiráciu; vráti ich počet.
retry($scheduleId, ?$connection)boolZlyhaný → čakajúci, pokusy sa vynulujú. Id plánov platia v rámci databázového pripojenia.
due(?$now, $limit = 100, ?$connection)Collection<ScheduledTransition>Čakajúce plány splatné do teraz, najstaršie prvé. Len na čítanie.
failed($limit = 100, ?$connection)Collection<ScheduledTransition>Zlyhané plány, naposledy zlyhané prvé — s ich subjektom a výsledkom.

Skratky traitu HasLifecycle ($listing->transition(), $listing->lifecycle()->…) volajú toho istého manažéra, takže všetko uvedené — vrátane Lifecycles::fake() — platí aj pre ne.

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.