---
title: "DI a akcie — Attributes for Laravel | Roundly"
description: "Bez fasády: vložte si AttributesManager a máte to isté API bez statických volaní, alebo volajte jednoúčelovú akciu priamo."
url: https://roundly-consulting.com/sk/open-source/navody/attributes-for-laravel/bez-fasady
language: sk
---

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

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

# DI a akcie

Fasáda je odporúčaná voľba, nie povinnosť. Máte tri rovnocenné vstupné body a všetky spúšťajú ten istý kód:

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

## Vloženie managera

```php
use RoundlyConsulting\Attributes\AttributesManager;

final class ImportColor
{
    public function __construct(private AttributesManager $attributes) {}

    public function __invoke(Product $product, string $color): void
    {
        $this->attributes->for($product)->set('color', $color);
    }
}
```

Attributes::fake() vymení okrem fasády aj väzbu v kontajneri, takže sa zaznamená aj vložený AttributesManager.

## Volanie akcie

```php
use RoundlyConsulting\Attributes\Actions\AttachAttributeAction;
use RoundlyConsulting\Attributes\Actions\SyncAttributesAction;
use RoundlyConsulting\Attributes\DataTransferObjects\AttributeData;

// The raw actions — one execute() each
app(AttachAttributeAction::class)->execute($product, new AttributeData('color', 'red'));

$attributes = app(SyncAttributesAction::class)->execute($product, [
    new AttributeData('color', 'red', collect(['hex' => '#f00'])),
    new AttributeData('size', 'L'),
]);                                                     // Collection<int, Attribute>
```

Akcie prijímajú DTO z RoundlyConsulting\\Attributes\\DataTransferObjects: AttributeData(name, value = null, ?Collection meta = null) pre hodnotu a AttributeDefinitionData pre definíciu. Priamo volaná akcia obchádza manager, preto ju fake nezaznamená.

## Metóda fasády → akcia

| Cesta cez fasádu | Akcia | execute() |
| --- | --- | --- |
| `for($o)->set()` | `AttachAttributeAction` | `(Model $owner, AttributeData $data): Attribute` |
| `for($o)->setMany(), for($o)->stage()->save()` | `AttachAttributesAction` | `(Model $owner, AttributeData ...$data): Collection<int, Attribute>` |
| `for($o)->sync(), for($o)->stage()->sync()` | `SyncAttributesAction` | `(Model $owner, list<AttributeData> $data, bool $forceDelete = false): Collection<int, Attribute>` |
| `for($o)->forget()` | `DetachAttributesAction` | `(Model $owner, list<string> $names, bool $forceDelete = false): int` |
| `for($o)->forgetExcept()` | `DetachAttributesExceptAction` | `(Model $owner, list<string> $keep, bool $forceDelete = false): list<string>` |
| `for($o)->meta()` | `SyncAttributeMetaAction` | `(Model $owner, string $name, ?Collection $meta): Attribute` |
| `prune()` | `PruneAttributesAction` | `(?int $days = null): int` |

WriteAttributeAction (samotný upsert za každým pripojením, synchronizáciou a zápisom metadát) a RecordAttributeRevisionAction sú @internal — volajú ich akcie vyššie, preto ich sami nevolajte. Akcie na pripojenie, synchronizáciu a metadáta overujú pred zápisom a každá zapisovacia akcia beží v jednej transakcii — v savepointe, ak už transakcia beží. Metódy pre definície a validáciu akciu nemajú; sú v AttributeRegistry.

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