---
title: "DI a akcie — Lifecycle for Laravel | Roundly"
description: "Bez fasády: injektujte LifecycleManager alebo zavolajte jednoúčelovú akciu s request DTO — mapa handle → manažér → akcia."
url: https://roundly-consulting.com/sk/open-source/navody/lifecycle-for-laravel/bez-fasady
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Lifecycle for Laravel](https://roundly-consulting.com/sk/open-source/navody/lifecycle-for-laravel.md)

# DI a akcie

Fasáda je odporúčaná voľba, nie jediná cesta. Rovnaký kód spúšťajú tri vstupy: fasáda Lifecycles (najkratší zápis), manažér RoundlyConsulting\\Lifecycle\\LifecycleManager — koreň fasády, singleton v kontajneri bez vlastného stavu — injektovaný cez konštruktor (rovnaké API, explicitná závislosť, žiadne statické volania) a akcie (jednoúčelové triedy s execute(), ktoré prijímajú request DTO a skladáte ich do vlastných akcií, jobov a príkazov).

## Injektovanie manažéra

```php
use RoundlyConsulting\Lifecycle\LifecycleManager;

final readonly class ReopenListing
{
    public function __construct(private LifecycleManager $lifecycle) {}

    public function __invoke(Listing $listing, User $user): void
    {
        $this->lifecycle->for($listing)->by($user)->because('Back in stock')->apply('reopen');
    }
}
```

## Volanie akcie

```php
use RoundlyConsulting\Lifecycle\Actions\ApplyTransitionAction;
use RoundlyConsulting\Lifecycle\DataTransferObjects\TransitionRequest;

// The raw use case
app(ApplyTransitionAction::class)->execute(new TransitionRequest(
    subject: $listing,
    lifecycle: 'status',
    transition: 'reopen',
    actor: $user,
    reason: 'Back in stock',
));
```

## Metódy manažéra s request DTO

Každá kontrola a zmena z handlu prejde metódou manažéra, väčšina z nich prijíma request DTO — apply, attempt, check, available, rollback, checkRollback, freeze, unfreeze, schedule, cancelScheduled, changeExpiry, adopt, adoptAll, runDueSchedules, sendExpiryWarnings, retrySchedule, sweep, prune a allowDirectWrites. Čítania sú len na handli. Tieto metódy vystavuje aj fasáda:

```php
use Carbon\CarbonInterval;
use RoundlyConsulting\Lifecycle\DataTransferObjects\ExpiryChangeRequest;
use RoundlyConsulting\Lifecycle\DataTransferObjects\PruneOptions;
use RoundlyConsulting\Lifecycle\DataTransferObjects\RollbackRequest;
use RoundlyConsulting\Lifecycle\Enums\ExpiryChange;
use RoundlyConsulting\Lifecycle\Facades\Lifecycles;

Lifecycles::rollback(new RollbackRequest($listing, 'status', toHistoryId: 42, actor: $user));
Lifecycles::checkRollback(new RollbackRequest($listing, 'status'));   // Decision
Lifecycles::changeExpiry(new ExpiryChangeRequest($listing, 'status', ExpiryChange::Extend, interval: CarbonInterval::days(7)));
Lifecycles::prune(new PruneOptions(historyOlderThanDays: 365, schedulesOlderThanDays: 30, dryRun: true));
```

## Metóda handlu → manažér → akcia

| Volanie handlu / fasády | Metóda manažéra | Akcia |
| --- | --- | --- |
| `apply() / attempt() / transitionTo()` | `apply(TransitionRequest) / attempt(TransitionRequest)` | `ApplyTransitionAction` |
| `check() / can() / canTransitionTo() / checkTransitionTo()` | `check(TransitionRequest)` | `CheckTransitionAction` |
| `allowedTransitions() / allowedStates()` | `available(AvailableTransitionsQuery)` | `ListAvailableTransitionsAction` |
| `rollback() / rollbackTo()` | `rollback(RollbackRequest)` | `RollbackAction` |
| `canRollback() / canRollbackTo()` | `checkRollback(RollbackRequest)` | `CheckRollbackAction` |
| `freeze()` | `freeze(FreezeRequest)` | `FreezeAction` |
| `unfreeze()` | `unfreeze(UnfreezeRequest)` | `UnfreezeAction` |
| `schedule()` | `schedule(ScheduleRequest)` | `ScheduleTransitionAction` |
| `cancelScheduled()` | `cancelScheduled(CancelScheduleRequest)` | `CancelScheduledTransitionAction` |
| `expireAt() / extend() / renew() / neverExpire()` | `changeExpiry(ExpiryChangeRequest)` | `ChangeExpiryAction` |
| `Lifecycles::sweep() / schedules()->runDue()` | `sweep(?$limit, ?$queue, ?$connection) / runDueSchedules(SweepOptions)` | `RunDueSchedulesAction` |
| `schedules()->warn()` | `sendExpiryWarnings(SweepOptions)` | `SendExpiryWarningsAction` |
| `schedules()->retry() / for($model)->retryScheduled()` | `retrySchedule(int $scheduleId, ?$connection)` | `RetryScheduleAction` |
| `Lifecycles::prune()` | `prune(PruneOptions)` | `PruneAction` |
| `for($model)->adopt()` | `adopt($model, ?$lifecycle)` | `AdoptLifecycleAction` |
| `model(Model::class)->adopt()` | `adoptAll(Model::class, …)` | `AdoptModelLifecyclesAction` |

- Každá metóda manažéra si z aktuálneho kontajnera vezme jednu akciu a zavolá execute(), takže prepísanie akcie v kontajneri platí pre fasádu, injektovaných manažérov, handle aj trait.
- Handle aj trait HasLifecycle vytvárajú request DTO a volajú manažéra — nikdy nie akciu — takže Lifecycles::fake() vidí každé volanie, nech prišlo akýmkoľvek spôsobom.
- Lifecycles::fake() vymení manažéra aj v kontajneri, takže sa podvrhnú aj manažéri injektovaní cez konštruktor (LifecycleFake rozširuje LifecycleManager). Priame volanie akcie fake obchádza.
- attempt() je apply(), ktoré zamietnutie vráti ako TransitionAttempt namiesto vyhodenia; allowDirectWrites() platí v rámci aktuálneho requestu alebo jobu a nemá vlastnú akciu.
- Manažér je bezpečný pre Octane: nedrží žiadny stav a všetko získava z aktuálneho kontajnera; skompilované definície sú nemenné a zdieľané.

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/lifecycle-for-laravel.md)
