---
title: "DI a akcie — Tags for Laravel | Roundly"
description: "Bez fasády: injektujte TagsManager alebo zavolajte jednoúčelovú akciu — každá akcia so signatúrou execute() a cestou cez fasádu."
url: https://roundly-consulting.com/sk/open-source/navody/tags-for-laravel/bez-fasady
language: sk
---

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

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

# DI a akcie

Fasáda je odporúčaná predvolená voľba, nie jediná cesta. Ten istý kód spúšťajú tri vstupné body: fasáda Tags (najkratšia), manažér RoundlyConsulting\\Tags\\TagsManager — koreň fasády, singleton v kontajneri — injektovaný cez konštruktor (rovnaké API, explicitná závislosť, žiadne statické volania) a akcie (final readonly triedy s jedinou metódou execute(), ktoré skladáte do vlastných akcií, úloh a príkazov):

```php
use RoundlyConsulting\Tags\Actions\Tagging\AttachTagsAction;
use RoundlyConsulting\Tags\DataTransferObjects\TagSelection;
use RoundlyConsulting\Tags\Facades\Tags;
use RoundlyConsulting\Tags\TagsManager;

Tags::for($concert)->attach(['live'], 'label');                                        // facade
app(TagsManager::class)->for($concert)->attach(['outdoor'], 'label');                  // dependency injection
app(AttachTagsAction::class)->execute($concert, TagSelection::of(['free'], 'label'));  // action
```

## Injektovanie manažéra

```php
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use RoundlyConsulting\Tags\TagsManager;

final class ConcertLabelsController
{
    public function __construct(private TagsManager $tags) {}

    public function update(Request $request, Concert $concert): Response
    {
        $this->tags->for($concert)->sync($request->input('labels', []), 'label');

        return response()->noContent();
    }
}
```

Manažér nedrží vlastný kontajner: akcie a služby na čítanie si pri každom volaní vezme z aktuálneho, takže je bezpečný pre Octane a platí aj väzba vytvorená počas požiadavky.

## Volanie akcie

```php
use RoundlyConsulting\Tags\Actions\Catalog\DeleteTagAction;
use RoundlyConsulting\Tags\Actions\Maintenance\RepairTagsAction;
use RoundlyConsulting\Tags\Actions\Tagging\SyncTagsAction;
use RoundlyConsulting\Tags\DataTransferObjects\RepairOptions;
use RoundlyConsulting\Tags\DataTransferObjects\TagSelection;
use RoundlyConsulting\Tags\Enums\TagChildren;

app(SyncTagsAction::class)->execute($concert, TagSelection::of($jazz, 'genre'));
app(DeleteTagAction::class)->execute($jazz, TagChildren::Reparent);
app(RepairTagsAction::class)->execute(new RepairOptions(counts: true, paths: false, scopeKeys: false, orphans: false));
```

## Metóda fasády → akcia

Menné priestory sú relatívne k RoundlyConsulting\\Tags\\Actions:

| Akcia | execute(…) | Vracia | Cesta cez fasádu |
| --- | --- | --- | --- |
| `Tagging\AttachTagsAction` | `execute($taggable, TagSelection $selection)` | `TagChanges` | Tags::attach(), for()->attach(), attachTags() |
| `Tagging\DetachTagsAction` | `execute($taggable, TagSelection $selection)` | `TagChanges` | Tags::detach(), for()->detach(), detachTags() |
| `Tagging\SyncTagsAction` | `execute($taggable, TagSelection $selection)` | `TagChanges` | Tags::sync(), for()->sync(), syncTags() |
| `Tagging\ClearTagsAction` | `execute($taggable, $type = null)` | `TagChanges` | Tags::clear(), for()->clear(), clearTags() |
| `Catalog\CreateTagAction` | `execute($type, TagData $data, ?Model $scope = null)` | `Tag` | type()->create(), make()->create() |
| `Catalog\FindOrCreateTagAction` | `execute($type, string\|array\|TagData $name, ?Model $scope = null)` | `Tag` | type()->findOrCreate(), make()->findOrCreate() |
| `Catalog\UpdateTagAction` | `execute(Tag $tag, UpdateTagData $data)` | `Tag` | type()->update(), rename(), edit()->save() |
| `Catalog\MoveTagAction` | `execute(Tag $tag, ?Tag $under = null, ?int $position = null)` | `Tag` | type()->move() |
| `Catalog\ReorderTagsAction` | `execute($type, ?Model $scope, ?Tag $parent, array $order)` | `Collection<int, Tag>` | type()->reorder() |
| `Catalog\DeleteTagAction` | `execute(Tag $tag, TagChildren $children = Refuse)` | `Tag` | type()->delete() |
| `Catalog\RestoreTagAction` | `execute(Tag $tag)` | `Tag` | type()->restore() |
| `Maintenance\RepairTagsAction` | `execute(RepairOptions $options)` | `RepairReport` | Tags::repair(), tags:repair |

- Každý zápis — z fasády, injektovaného manažéra, handle, buildera či metódy modelu — prechádza manažérom, ktorý akciu vezme z kontajnera, takže vaša väzba akcie v kontajneri platí všade.
- Tags::fake() vymení manažéra aj v kontajneri, takže fake sa týka aj injektovaného TagsManager. Priame volanie akcie sa nezaznamená — zaznamenajú sa len volania manažéra.
- Kontroly rozsahu handle type() (zápis presne zodpovedá jeho rozsahu) sú v handle: akcia volaná priamo zapíše akýkoľvek štítok, ktorý jej odovzdáte.
- Služby na čítanie BuildTagTree, LoadAncestors, PopularTags a SuggestTags (RoundlyConsulting\\Tags\\Queries) sa tiež berú z kontajnera, takže môžete naviazať vlastné.
- Actions\\Internal\\\* (AdjustUsageCountsAction, ApplyTagChangesAction, ClearDeletedTaggableAction, ResolveTagsAction, RewriteSubtreePathsAction) sú stavebné bloky — nevolajte ich.

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