---
title: "DI a akcie — Forms for Laravel | Roundly"
description: "Uprednostňujete explicitné závislosti? Injektujte FormsManager s rovnakým API alebo volajte jednoúčelové akcie za každou metódou fasády."
url: https://roundly-consulting.com/sk/open-source/navody/forms-for-laravel/bez-fasady
language: sk
---

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

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

# DI a akcie

Fasáda je odporúčaná voľba, nie jediná cesta. K dispozícii máte tri rovnocenné vstupné body:

- Fasáda Forms — najkratší zápis, ktorý používa aj zvyšok tejto dokumentácie.
- Manažér RoundlyConsulting\\Forms\\FormsManager — koreň fasády. Injektujte ho cez konštruktor a získate rovnaké API s explicitnou závislosťou a bez statických volaní.
- Akcie — jednoúčelové triedy v RoundlyConsulting\\Forms\\Actions s metódou execute(), ktoré skladáte do vlastných akcií, jobov a príkazov.

## Injektovanie manažéra

```php
use Illuminate\Http\Request;
use RoundlyConsulting\Forms\FormsManager;

final class ContactFormController
{
    public function __construct(private FormsManager $forms) {}

    public function store(Request $request)
    {
        $form = $this->forms->find('contact');

        $this->forms->validate($form, $request);
        $result = $this->forms->submit($form, $request, $request->user());

        $this->forms->submission($result->uuid)->get();   // builders and handles work too

        return back()->with('reference', $result->uuid);
    }
}
```

FormsManager je autowired singleton a zámerne nie je final: Forms::fake() ho nahradí triedou FormsFake, ktorá z neho dedí, takže fake platí aj pre injektovaných manažérov.

## Volanie akcie

```php
use RoundlyConsulting\Forms\Actions\FindFormAction;
use RoundlyConsulting\Forms\Actions\StoreSubmissionAction;

// Resolve from the container (or inject into your own action, job or command).
$form = app(FindFormAction::class)->execute('contact');
$result = app(StoreSubmissionAction::class)->execute($form, $request, $user);
```

Manažér pri každom volaní získa akciu z kontajnera, takže vlastná implementácia akcie zmení aj správanie fasády. Fake zaznamenáva na úrovni manažéra — akciu, ktorú zavoláte priamo, nezaznamená.

## Metóda fasády → akcia

| Metóda fasády | Akcia | execute() |
| --- | --- | --- |
| `find()` | `FindFormAction` | (string $key): Form |
| `create(), define()->create()` | `CreateFormAction` | (FormDefinitionData $data): Form |
| `update()->save()` | `UpdateFormAction` | (FormDefinitionData $data): Form |
| `sync(), forms:sync` | `SyncFormsAction` | (?array $definitions = null): list<string> |
| `validate()` | `ValidateSubmissionAction` | (Form $form, Request $request): array |
| `submit()` | `StoreSubmissionAction` | (Form, Request, ?Model $sender, bool $bypassClosed): SubmissionResult |
| `draft()` | `DraftSubmissionAction` | (Form, Request, ?Model $sender, ?string $uuid, bool $bypassClosed): SubmissionResult |
| `finalize(), submission()->finalize()` | `FinalizeSubmissionAction` | (string $uuid, bool $bypassClosed = false): SubmissionResult |
| `submission()->model(), review($uuid)` | `FindSubmissionAction` | (string $uuid): FormSubmission |
| `review()->…->open()` | `ReviewSubmissionAction` | (FormSubmission, array $approvers, ApprovalRule $rule, ?int $quorum): ApprovalRequest |
| `createSubmission()` | `CreateSubmissionAction` | (SubmissionData $data): Submission |

ValidateFieldTypesAction a CreateFormSubmissionAction sú @internal stavebné bloky validácie a odosielania — nie sú určené na priame použitie v aplikácii.

## Akcie, ktoré prijímajú DTO

CreateFormAction a UpdateFormAction prijímajú FormDefinitionData (vytvoríte ju cez FormDefinitionData::fromArray()); CreateSubmissionAction prijíma SubmissionData (SubmissionData::forField()). Akcia pre surový riadok vynecháva kontrolu uzavretého formulára, ktorú pridáva Forms::createSubmission():

```php
use RoundlyConsulting\Forms\Actions\CreateFormAction;
use RoundlyConsulting\Forms\Actions\CreateSubmissionAction;
use RoundlyConsulting\Forms\DataTransferObjects\FormDefinitionData;
use RoundlyConsulting\Forms\DataTransferObjects\SubmissionData;

$form = app(CreateFormAction::class)->execute(FormDefinitionData::fromArray([
    'key' => 'newsletter',
    'name' => 'Newsletter',
    'groups' => [],
]));

// The raw row write — no closed-form check (Forms::createSubmission() adds it).
$row = app(CreateSubmissionAction::class)->execute(
    SubmissionData::forField($field, $uuid, ['value' => 'Jane'], $user),
);
```

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