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

Každý kľúč má predvolenú hodnotu, takže publikovanie config/lifecycle.php je voliteľné. Publikovaný súbor v plnom znení:

return [
    'key_type' => env('LIFECYCLE_KEY_TYPE', 'bigint'),
    'actor_key_type' => env('LIFECYCLE_ACTOR_KEY_TYPE', 'bigint'),

    'models' => [
        'state' => LifecycleState::class,
        'transition' => LifecycleTransition::class,
        'schedule' => LifecycleSchedule::class,
    ],

    'subjects' => [],

    'strict_writes' => env('LIFECYCLE_STRICT_WRITES', true),

    'actor' => [
        'from_auth' => env('LIFECYCLE_ACTOR_FROM_AUTH', true),
        'guard' => env('LIFECYCLE_ACTOR_GUARD'),
    ],

    'transactions' => [
        'attempts' => 3,
        'mysql_read_committed' => env('LIFECYCLE_MYSQL_READ_COMMITTED', true),
    ],

    'history' => [
        'store_payload' => env('LIFECYCLE_HISTORY_STORE_PAYLOAD', true),
        'max_context_bytes' => 16384,
        'reason_max_length' => 1000,
        'purge_on_force_delete' => env('LIFECYCLE_HISTORY_PURGE_ON_FORCE_DELETE', true),
        'prune_after_days' => env('LIFECYCLE_HISTORY_PRUNE_AFTER_DAYS'),
    ],

    'rollback' => [
        'default_window' => env('LIFECYCLE_ROLLBACK_DEFAULT_WINDOW'),
        'max_steps' => 50,
    ],

    'schedules' => [
        'batch_size' => 500,
        'max_per_run' => 10000,
        'max_attempts' => 5,
        'retry_after' => '5 minutes',
        'queue' => [
            'enabled' => env('LIFECYCLE_QUEUE_SWEEPS', false),
            'connection' => env('LIFECYCLE_QUEUE_CONNECTION'),
            'name' => env('LIFECYCLE_QUEUE'),
        ],
        'prune_after_days' => env('LIFECYCLE_SCHEDULES_PRUNE_AFTER_DAYS', 30),
    ],

    'rate_limits' => [
        'prefix' => 'lifecycle',
    ],

    'graph' => [
        'default_format' => 'mermaid',
    ],
];

Všetky kľúče

KľúčPredvolenéEnvÚčel
key_typebigintLIFECYCLE_KEY_TYPETyp id stĺpcov subjektu, ktoré vytvoria migrácie: bigint, uuid alebo ulid (bez ohľadu na veľkosť písmen). Nastavte pred migráciou; iná hodnota vyhodí výnimku.
actor_key_typebigintLIFECYCLE_ACTOR_KEY_TYPETyp id stĺpcov aktéra (kto vykonal prechod, zmrazil, naplánoval): bigint, uuid alebo ulid; iná hodnota vyhodí výnimku.
models.stateLifecycleState—Nahradí model záznamu stavu vašou podtriedou (musí rozširovať LifecycleState).
models.transitionLifecycleTransition—Nahradí model histórie vašou podtriedou (musí rozširovať LifecycleTransition).
models.scheduleLifecycleSchedule—Nahradí model plánov vašou podtriedou (musí rozširovať LifecycleSchedule).
subjects[]—Vaše modely so životným cyklom. lifecycle:validate bez argumentov overí každý cyklus každého uvedeného modelu vrátane stĺpcov, ktoré definícia menuje. Modely fungujú aj bez uvedenia.
strict_writestrueLIFECYCLE_STRICT_WRITESUloženie priamo zmeneného atribútu cyklu vyhodí DirectStateWriteException.
actor.from_authtrueLIFECYCLE_ACTOR_FROM_AUTHBez by() je aktérom prihlásený používateľ.
actor.guardnullLIFECYCLE_ACTOR_GUARDAuth guard pre from_auth (null = predvolený guard).
transactions.attempts3—Koľkokrát sa transakcia po deadlocku zopakuje (1–10) — len ak vonkajšiu transakciu otvoril balík.
transactions.mysql_read_committedtrueLIFECYCLE_MYSQL_READ_COMMITTEDMySQL/MariaDB: transakcia, ktorá počíta kvótu, beží na READ COMMITTED. Vypnuté: zostane vaša izolácia a počet kvóty použije zamykacie čítania.
history.store_payloadtrueLIFECYCLE_HISTORY_STORE_PAYLOADUloží zvalidovaný payload (bez kľúčov zo sensitive()) do riadku histórie.
history.max_context_bytes16384—Limit veľkosti JSON uloženého kontextu (1024–1048576); väčší sa zamietne ako invalid_payload.
history.reason_max_length1000—Dlhšie dôvody sa zamietnu ako reason_too_long — pri prechodoch, plánoch aj rollbackoch; dlhší dôvod zmrazenia vyhodí InvalidLifecycleUsageException (1–10000).
history.purge_on_force_deletetrueLIFECYCLE_HISTORY_PURGE_ON_FORCE_DELETETrvalé zmazanie subjektu zmaže aj jeho záznamy, históriu a plány.
history.prune_after_daysnullLIFECYCLE_HISTORY_PRUNE_AFTER_DAYSPredvolená hodnota lifecycle:prune pre riadky histórie (1–36500; null alebo prázdna hodnota = nikdy). Limity čistenie prežijú, staršie body rollbacku a idempotentné kľúče nie.
rollback.default_windownullLIFECYCLE_ROLLBACK_DEFAULT_WINDOWAko dlho sa dá prechod vrátiť, ak nedeklaruje vlastné okno („7 days“; null alebo prázdna hodnota = bez obmedzenia).
rollback.max_steps50—Najviac riadkov, ktoré vráti jedno rollbackTo() (1–1000).
schedules.batch_size500—Riadky na jednu dávku sweepu (1–10000).
schedules.max_per_run10000—Najviac plánov, ktoré spracuje jeden beh sweepu (1–1000000).
schedules.max_attempts5—Počet pokusov, kým sa opakovateľný naplánovaný prechod označí ako zlyhaný (1–100).
schedules.retry_after5 minutes—Odklad, po ktorom sa zamietnutý, chybný alebo zmrazený naplánovaný prechod skúsi znova. Prázdna hodnota sa považuje za nenastavenú → 5 minutes.
schedules.queue.enabledfalseLIFECYCLE_QUEUE_SWEEPSSweep odošle jeden job na každý splatný plán namiesto behu priamo.
schedules.queue.connectionnullLIFECYCLE_QUEUE_CONNECTIONPripojenie fronty pre tieto joby.
schedules.queue.namenullLIFECYCLE_QUEUENázov fronty pre tieto joby.
schedules.prune_after_days30LIFECYCLE_SCHEDULES_PRUNE_AFTER_DAYSPredvolená hodnota lifecycle:prune pre dokončené plány (1–36500; null alebo prázdna hodnota = nikdy).
rate_limits.prefixlifecycle—Prefix kľúčov rate limitera pre prechody s rateLimit(); započítava sa do limitu 250 znakov pre kľúč.
graph.default_formatmermaid—Presne mermaid alebo dot — formát grafu, ak nie je zadaný.

Striktné hodnoty

Každá hodnota sa overí pri čítaní, takže preklep nikdy potichu nevráti predvolenú hodnotu:

  • Prázdna hodnota (LIFECYCLE_X= alebo len medzery) sa považuje za nenastavenú: platí predvolená hodnota kľúča a kľúč, ktorý pripúšťa null (LIFECYCLE_HISTORY_PRUNE_AFTER_DAYS=, LIFECYCLE_SCHEDULES_PRUNE_AFTER_DAYS=, LIFECYCLE_ROLLBACK_DEFAULT_WINDOW=), sa číta ako nenastavený (null).
  • Boolean hodnoty akceptujú true/false/1/0/yes/no/on/off bez ohľadu na veľkosť písmen (prázdna hodnota dostane predvolenú, takže LIFECYCLE_STRICT_WRITES= striktné zápisy ponechá zapnuté); akákoľvek iná hodnota vyhodí InvalidLifecycleConfigurationException s názvom kľúča aj hodnotou.
  • key_type a actor_key_type akceptujú len bigint, uuid alebo ulid (bez ohľadu na veľkosť písmen; prázdna hodnota sa číta ako bigint); čokoľvek iné vyhodí počas migrate a about InvalidConfigurationException z toolkitu — nie LifecycleException, takže ju catch (LifecycleException) nezachytí.
  • Čísla musia byť kanonické celé čísla: '5.5', '+5' a '1e3' vyhodia výnimku. Číslo alebo interval mimo rozsahu vyhodí InvalidLifecycleConfigurationException.
  • graph.default_format musí byť presne mermaid alebo dot. Vymenený model (models.*) musí byť existujúca trieda, ktorá rozširuje model balíka, inak InvalidLifecycleConfigurationException — nikdy sa nevráti k modelu balíka.
  • Hodnota vyhodí výnimku, keď ju niečo prvýkrát prečíta. php artisan about číta typy kľúčov, väčšinu boolean hodnôt, modely aj subjekty, preto ho spúšťajte po každej zmene konfigurácie — preklep sa ukáže hneď.

Registrácia subjektov

Svoje modely so životným cyklom uveďte v subjects, aby mal lifecycle:validate v CI čo kontrolovať. Modely fungujú aj bez uvedenia; ak nie je uvedený žiadny, lifecycle:validate --strict zlyhá namiesto prázdneho úspechu:

// config/lifecycle.php
'subjects' => [
    App\Models\Listing::class,
    App\Models\Order::class,
],

Prostredie (env)

Všetky env premenné, ktoré konfigurácia číta, s predvolenými hodnotami:

LIFECYCLE_KEY_TYPE=bigint
LIFECYCLE_ACTOR_KEY_TYPE=bigint
LIFECYCLE_STRICT_WRITES=true
LIFECYCLE_ACTOR_FROM_AUTH=true
LIFECYCLE_ACTOR_GUARD=
LIFECYCLE_MYSQL_READ_COMMITTED=true
LIFECYCLE_HISTORY_STORE_PAYLOAD=true
LIFECYCLE_HISTORY_PURGE_ON_FORCE_DELETE=true
LIFECYCLE_HISTORY_PRUNE_AFTER_DAYS=
LIFECYCLE_ROLLBACK_DEFAULT_WINDOW=
LIFECYCLE_QUEUE_SWEEPS=false
LIFECYCLE_QUEUE_CONNECTION=
LIFECYCLE_QUEUE=
LIFECYCLE_SCHEDULES_PRUNE_AFTER_DAYS=30

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.