---
title: "DI, akcie a DTO — Requests for Laravel | Roundly"
description: "Bez fasády: injektujte RequestManager alebo spúšťajte CreateRequest, ResolveRequest a ďalšie akcie s typovaným CreateRequestDto."
url: https://roundly-consulting.com/sk/open-source/navody/requests-for-laravel/akcia-a-dto
language: sk
---

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

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

# DI, akcie a DTO

Balík má tri rovnocenné vstupné body a všetky spúšťajú ten istý kód:

- Fasáda Requests — najkratší zápis a odporúčaná voľba.
- Manažér RoundlyConsulting\\Requests\\RequestManager — koreň fasády. Injektujte ho cez konštruktor a dostanete rovnaké API ako explicitnú závislosť, bez statických volaní. Každú akciu získava z kontajnera, takže vaše prepisy platia.
- Akcie v RoundlyConsulting\\Requests\\Actions — jednoúčelové triedy s metódou execute(), ktoré skladáte do vlastných akcií, jobov a príkazov.

## Injektovanie manažéra

```php
use RoundlyConsulting\Requests\Models\Request;
use RoundlyConsulting\Requests\RequestManager;

final class SubmitClaim
{
    public function __construct(private RequestManager $requests) {}

    public function __invoke(User $user): Request
    {
        return $this->requests->make()->author($user)->title('Expense reimbursement')->create();
    }
}
```

Requests::fake() podstrčí podtyp RequestManager za fasádu aj do kontajnera, takže fake dostane aj manažér injektovaný cez konštruktor.

## Volanie akcie

CreateRequest prijíma CreateRequestDto a vyvolá RequestCreated:

```php
use RoundlyConsulting\Requests\Actions\CreateRequest;
use RoundlyConsulting\Requests\DataTransferObjects\CreateRequestDto;
use RoundlyConsulting\Requests\Enums\Status;

$request = app(CreateRequest::class)->execute(new CreateRequestDto(
    status: Status::New,
    author: $user,
    title: 'Expense reimbursement',
    meta: collect(['ip' => request()->ip()]),
    approvers: [$alice, $bob],
    expiresAt: now()->addDays(7),
));
```

## Metóda fasády → akcia

| Metóda fasády / manažéra | Akcia |
| --- | --- |
| `make()->create(), create(CreateRequestDto)` | `CreateRequest` |
| `approve(), reject(), reopen()` | `ResolveRequest` |
| `cancel($request)` | `CancelRequest` |
| `expire($request)` | `ExpireRequest` |
| `expireDue(bool $dryRun = false, int $chunk = 500)` | `ExpireDueRequests` |
| `canTransition($request, Status $to)` | — (číta graf životného cyklu) |

Priamo volané akcie obídu manažér, preto ich Requests::fake() nezaznamená.

## Všetky polia DTO

CreateRequestDto je readonly trieda s pomenovanými argumentmi konštruktora a predvolenými hodnotami:

```php
new CreateRequestDto(
    status: Status::New,               // Status
    author: null,                      // ?Model
    type: null,                        // ?string
    title: null,                       // ?string
    description: null,                 // ?string
    meta: null,                        // ?Collection
    approvers: [],                     // list<Model> — the declared approvers (saved models)
    expiresAt: null,                   // ?CarbonInterface
    rule: ApprovalRule::Unanimous,     // ApprovalRule
    quorum: null,                      // ?int
    stages: [],                        // list<StageDefinition> — an ad-hoc pipeline
    workflow: null,                    // ?string — a named preset
    stageApprovers: [],                // list<list<Model>> — groups for a staged preset
    rejectOnStageRejection: true,      // bool
);
```

## Ktoré schvaľovanie sa otvorí

CreateRequest otvorí najviac jednu schvaľovaciu požiadavku, v tomto poradí priority:

- workflow — pomenovaná predvoľba má prednosť; použije stageApprovers, ak sú zadané, inak approvers.
- stages — explicitné viacstupňové schvaľovanie s ohľadom na rejectOnStageRejection. Jednoduchý zoznam schvaľovateľov zadaný popri stupňoch sa odovzdá tiež, takže engine takúto kombináciu odmietne.
- approvers — jednoduché schvaľovacie kolo so zvoleným pravidlom a kvórom, ktoré týchto schvaľovateľov menovite určí.
- nič — bez deklarovaných schvaľovateľov sa kolo neotvorí a žiadosť uzavrie prvé rozhodnutie.

Schvaľovatelia musia byť uložené modely: samotné id neurčuje typ modelu, takže by sa nedalo vynútiť, a CreateRequest ho v approvers aj stageApprovers odmietne výnimkou InvalidApprover. Žiadosť a jej schvaľovacie kolo sa zapisujú spolu — ak sa kolo nedá otvoriť (neuložený schvaľovateľ, neznáma predvoľba workflowu), žiadna žiadosť nezostane.

## 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/requests-for-laravel.md)
