---
title: "DI a akcie — Options for Laravel | Roundly"
description: "Bez fasády: vložte si OptionsManager a máte to isté API bez statických volaní, alebo volajte akcie na export a import priamo."
url: https://roundly-consulting.com/sk/open-source/navody/options-for-laravel/bez-fasady
language: sk
---

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

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

# DI a akcie

Fasáda je odporúčaná voľba, nie povinnosť. Máte tri rovnocenné vstupné body:

- Fasáda Options — najkratší zápis, vhodný pre väčšinu kódu.
- Manager RoundlyConsulting\\Options\\OptionsManager vložený cez konštruktor — je koreňom fasády, preto má presne to isté API, len ako explicitnú závislosť bez statických volaní.
- Akcie — jednoúčelové triedy s jedinou metódou execute(), ktoré skladáte do vlastných akcií, jobov a príkazov. Options má dve: ExportOptionsAction a ImportOptionsAction.

## Vloženie managera

```php
use RoundlyConsulting\Options\OptionsManager;

final class CopyTeamSettings
{
    public function __construct(private OptionsManager $options) {}

    public function __invoke(Team $from): string
    {
        return $this->options->exportJson($from);
    }
}

// The same API as the facade, handles included:
$this->options->for($team)->set(ThemeOption::class, 'dark');
```

Options::fake() vymení väzbu v kontajneri, takže OptionsManager získaný po tomto volaní je tiež fake.

## Volanie akcie

```php
use RoundlyConsulting\Options\Actions\ExportOptionsAction;
use RoundlyConsulting\Options\Actions\ImportOptionsAction;

// The raw actions — one execute() each:
$payloads = app(ExportOptionsAction::class)->execute($team, globalOnly: false); // list<OptionPayload>
$count = app(ImportOptionsAction::class)->execute($payloads);                    // int
```

## Metóda fasády → akcia

| Metóda fasády | Akcia | execute() |
| --- | --- | --- |
| `Options::export()` | `ExportOptionsAction` | `execute(?Model $owner = null, bool $globalOnly = false): list<OptionPayload>` |
| `Options::exportJson()` | — (zakóduje export()) | — |
| `Options::import()` | `ImportOptionsAction` | `execute(list<OptionPayload> $payloads): int` |

Všetky ostatné metódy — get(), set(), handly, skupiny, observery či prepojenie s konfiguráciou — sú priamo na manageri; samostatnú akciu nemajú. Metóda managera resolveOptionInstance() je @internal (resolver pre prepojenie s konfiguráciou), preto na nej nestavajte.

## DTO OptionPayload

Obe akcie pracujú s RoundlyConsulting\\Options\\DataTransferObjects\\OptionPayload — jedným uloženým riadkom. Payloady si môžete zostaviť sami alebo ich získať z riadkov či JSON:

```php
use RoundlyConsulting\Options\DataTransferObjects\OptionPayload;

$payload = new OptionPayload('theme', 'dark', ownerType: User::class, ownerId: 5);

OptionPayload::fromArray(['key' => 'theme', 'value' => 'dark']); // global row
OptionPayload::list($rows);                                      // rows or payloads → list<OptionPayload>
OptionPayload::listFromJson($json);                              // a JSON export → list<OptionPayload>

$payload->toArray(); // ['key' => 'theme', 'value' => 'dark', 'owner_type' => User::class, 'owner_id' => 5]
```

owner\_id sa riadi podľa options.key\_type — pri vlastníkoch s bigint je to int, pri UUID či ULID reťazec. fromArray() prevedie reťazce číslic na int, riadok, ktorý má len owner\_type alebo len owner\_id, považuje za globálny a hodnotu prevedie na reťazec stĺpca — hodnota, ktorá nie je reťazec, číslo, boolean ani null, vyhodí InvalidOptionPayload.

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