Open source
Lifecycle for Laravel
composer require roundly-consulting/lifecycle-for-laravelPrehľad
Stavové životné cykly — stavový automat — pre akýkoľvek Eloquent model so stavom: objednávky, tikety, inzeráty, predplatné či žiadosti. Stavy modelu a pomenované prechody medzi nimi deklarujete raz v malej triede definície — každý presun potom prejde jednou pipeline kontrol, ktorá overí, kto smie konať, limity a kvóty odolné voči súbehu, a zapíše riadok do histórie, ktorú nemožno meniť. Expirácia, upozornenia „čoskoro vyprší“, plánované prechody a rollbacky sú zabudované a každé zamietnutie je štruktúrovaný, preložený dôvod, ktorý zobrazíte priamo v rozhraní. Natívny balík s licenciou MIT, postavený len na Laraveli a vlastných základných balíkoch Roundly — bez závislostí tretích strán.
Čo získate
Deklaratívne definície
Stavy z backed enumu alebo reťazcov, počiatočný a koncové stavy a pomenované prechody so zástupným znakom — aj viac cyklov na jeden model.
Jedna pipeline kontrol
Gate abilities, pravidlá pre aktéra, dôvody, validácia payloadu, vlastné guardy a termíny — každé zamietnutie je štruktúrovaný, preložený Denial.
Limity a kvóty bez súbehu
Maximálny počet, cooldown, minimálny čas v stave, rate limity a kvóty podľa scope, ktoré vydržia aj súbežné požiadavky.
Expirácia a plánovanie
TTL pre každý stav, ochranná lehota, upozornenia len raz, predĺženie a obnovenie a ľubovoľný prechod naplánovaný na neskôr — všetko spustí jeden sweep.
Rollbacky a história
Vráťte posledný prechod alebo sa vráťte k bodu v histórii, s časovým oknom, kompenzáciou a snapshotmi — nad históriou, ktorú nemožno meniť.
Bezpečné pri súbehu
Zámok riadku a zápis cez compare-and-swap pri každom prechode, udalosti po commite, optimistické verzie a idempotentné kľúče.
Fasáda, DI alebo akcie
Jedna fasáda Lifecycles, injektovateľný manažér alebo jednoúčelové akcie — a fake, ktorý odmietne to, čo skutočný engine odmietne aj bez databázy.
Dokumentácia
Inštalácia
Inštalácia cez Composer, voľba typov kľúčov, publikovanie migrácií a naplánovanie sweepu, keď stavy expirujú alebo plánujete prechody.
Konfigurácia
Každý konfiguračný kľúč, predvolená hodnota a env premenná — typy kľúčov, subjekty, striktné zápisy, aktéri, transakcie, história a plány.
Definovanie životného cyklu
Deklarujte stavy, počiatočný a koncové stavy a pomenované prechody v triede definície — každá metóda buildera a spôsob validácie.
Modely so životným cyklom
Implementujte LifecycleSubject, pridajte trait HasLifecycle a priraďte atribúty k definíciám — viac cyklov na model, vzťahy a rezervované názvy.
Fasáda Lifecycles
Prehľad fasády Lifecycles — handle for($model), pomocníci model(), prístupy definitions() a schedules(), sweep a priame zápisy.
DI a akcie
Bez fasády: injektujte LifecycleManager alebo zavolajte jednoúčelovú akciu s request DTO — mapa handle → manažér → akcia.
Aplikovanie prechodov
Aplikujte pomenované prechody s aktérom, dôvodom a payloadom — transitionTo(), attempt(), výsledky, optimistické verzie a idempotentné kľúče.
Overenie pred akciou
Overte prechod ešte pred aplikovaním — can(), check(), allowedTransitions() a štruktúrované, preložené objekty Decision a Denial.
Obmedzenia a guardy
Pipeline kontrol v poradí — systémový kontext, pravidlá pre aktéra, Gate abilities, dôvody, payload, vlastné guardy — a všetky kódy zamietnutí.
Limity, kvóty a zmrazenie
Maximálny počet, cooldowny, minimálny čas v stave, zapečatenie, rate limity, kvóty podľa scope odolné voči súbehu a zmrazenie cyklu.
Handlery, hooky, stampy a snapshoty
Spúšťajte vedľajšie efekty v transakcii cez handlery a hooky onEnter/onExit, zapisujte časy, zachytávajte atribúty a kompenzujte pri rollbacku.
Expirácia
TTL pre stav z intervalu, closure alebo stĺpca — ochranná lehota, upozornenia len raz, effectiveState() a extend, renew či neverExpire().
Plánované prechody a sweep
Naplánujte ľubovoľný prechod na neskôr a spúšťajte splatné expirácie, upozornenia a plány cez lifecycle:sweep — priamo alebo cez frontu.
Rollbacky a história
Vráťte posledný prechod alebo sa vráťte k bodu v histórii — všetko alebo nič, s oknom, kompenzáciou a snapshotmi — plus nemenná história.
Dotazovanie
Query scopes pre stav, expiráciu, ochrannú lehotu, zmrazenie a čas v stave — plus eager loading cez withLifecycle() proti N+1 dotazom.
Striktné zápisy a drift
Prečo priame zápisy stavu vyhadzujú výnimku, ktoré spôsoby zápisu obchádzajú engine a ako allowDirectWrites() a adopcia zosúladia drift.
Definície a grafy
Prezerajte stavy a prechody cez Lifecycles::model() a definitions() a exportujte diagramy Mermaid alebo DOT cez lifecycle:graph.
API zdroje a validácia
LifecycleResource a TransitionRecordResource pre API, validačné pravidlá ValidTransition a ValidState a 422 či Retry-After zo zamietnutí.
Udalosti
Všetky udalosti, kedy sa odošlú a čo nesú — počúvajte LifecycleTransitioned, nie updated z Eloquentu, a vedľajšie efekty spúšťajte po commite.
Artisan príkazy
make:lifecycle, sweep, graph, validate, show, adopt a prune — signatúry, voľby a kedy ktorý príkaz spúšťať.
Súbežný prístup a databázy
Jedna transakcia a poradie zámkov pri každej zmene, zápis stavu cez compare-and-swap, READ COMMITTED pre kvóty na MySQL, deadlocky a Octane.
Migrácia zo status enumov
Preneste ručne písané status enumy, kontroly a príkazy na balík a presuňte existujúcu tabuľku cez lifecycle:adopt.
Testovanie
Cez Lifecycles::fake() zaznamenáte prechody a zamietate na požiadanie, so všetkými aserciami — alebo testujte skutočný engine s factories.
Požiadavky
PHP 8.4+, Laravel 12 alebo 13 a SQLite, PostgreSQL alebo MySQL/MariaDB — s tabuľkami balíka v tej istej databáze ako vaše modely.
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.