---
title: "DI a akcie — Advertisements for Laravel | Roundly"
description: "Injektujte AdvertisementManager s rovnakým API bez statických volaní alebo volajte jednoúčelovú akciu za každou metódou fasády."
url: https://roundly-consulting.com/sk/open-source/navody/advertisements-for-laravel/bez-fasady
language: sk
---

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

[Advertisements for Laravel](https://roundly-consulting.com/sk/open-source/navody/advertisements-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 Advertisements — najkratší zápis, ktorý používa aj zvyšok tejto dokumentácie.
- Manažér RoundlyConsulting\\Advertisements\\AdvertisementManager — 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\\Advertisements\\Actions s jedinou metódou execute(), ktoré skladáte do vlastných akcií, jobov a príkazov.

## Injektovanie manažéra

```php
use RoundlyConsulting\Advertisements\AdvertisementManager;
use RoundlyConsulting\Advertisements\Models\Advertisement;

final class LaunchCampaign
{
    public function __construct(private AdvertisementManager $ads) {}

    public function __invoke(Advertisement $ad): void
    {
        $this->ads->for($ad)->placements()->sync(['sidebar', 'header']);
        $this->ads->publish($ad);
    }
}
```

AdvertisementManager zámerne nie je final: Advertisements::fake() nainštaluje jeho podtyp AdvertisementsFake za fasádu aj do kontajnera — fake preto dostanú aj manažéry injektované cez konštruktor.

## Volanie akcie

Akciu získajte z kontajnera alebo ju uveďte ako typ v controlleri, jobe či vlastnej akcii:

```php
use RoundlyConsulting\Advertisements\Actions\PublishAdvertisement;

// The raw use case:
app(PublishAdvertisement::class)->execute($ad, now()->addDay());
```

```php
use Illuminate\Http\RedirectResponse;
use RoundlyConsulting\Advertisements\Actions\PublishAdvertisement;
use RoundlyConsulting\Advertisements\Models\Advertisement;

final class ScheduleAdvertisementController
{
    public function __invoke(Advertisement $advertisement, PublishAdvertisement $publish): RedirectResponse
    {
        $publish->execute($advertisement, now()->addDay());   // scheduled for tomorrow

        return back();
    }
}
```

Manažér pri každom volaní získa akciu z kontajnera, takže vlastná implementácia zmení aj správanie fasády. Fake nahrádza manažéra, nie akcie — akcia zavolaná priamo stále zapisuje riadky.

## Metóda fasády → akcia

| Metóda fasády | Akcia | Signatúra |
| --- | --- | --- |
| `create()` | `CreateAdvertisement` | `execute(AdvertisementData $data): Advertisement` |
| `update()` | `UpdateAdvertisement` | `execute(Advertisement $ad, AdvertisementData $data): Advertisement` |
| `publish()` | `PublishAdvertisement` | `execute(Advertisement $ad, ?CarbonInterface $at = null): Advertisement` |
| `unpublish()` | `UnpublishAdvertisement` | `execute(Advertisement $ad): Advertisement` |
| `expire()` | `ExpireAdvertisement` | `execute(Advertisement $ad, ?CarbonInterface $at = null): Advertisement` |
| `archive()` | `ArchiveAdvertisement` | `execute(Advertisement $ad): Advertisement` |
| `delete()` | `DeleteAdvertisement` | `execute(Advertisement $ad): bool` |
| `for($ad)->placements()->attach()` | `AttachPlacements` | `execute(Advertisement $ad, iterable $placements): Advertisement` |
| `for($ad)->placements()->detach()` | `DetachPlacements` | `execute(Advertisement $ad, iterable $placements): Advertisement` |
| `for($ad)->placements()->sync()` | `SyncPlacements` | `execute(Advertisement $ad, iterable $placements): Advertisement` |
| `for($ad)->track()->impression()` | `RecordImpression` | `execute(Advertisement $ad, $placement = null, ?ImpressionData $data = null): ?AdvertisementEvent` |
| `for($ad)->track()->click()` | `RecordClick` | `execute(Advertisement $ad, $placement = null, ?ImpressionData $data = null): ?AdvertisementEvent` |

create() a update() prijímajú AdvertisementData; akcie merania voliteľné ImpressionData (pozrite Vytváranie a úprava reklám a Meranie zobrazení a klikov). Surové akcie merania zaznamenajú presne to, čo dostanú — kontrola živej reklamy aj umiestnenia je v for($ad)->track($placement):

```php
use RoundlyConsulting\Advertisements\Actions\RecordImpression;
use RoundlyConsulting\Advertisements\DataTransferObjects\ImpressionData;

// Records what it is given — the live-ad and placement checks live in for($ad)->track($placement).
app(RecordImpression::class)->execute($ad, 'sidebar', new ImpressionData(ip: $request->ip()));
```

RecordAdvertisementEvent je @internal — jediná cesta zápisu za RecordImpression, RecordClick aj jobom pre frontu. Merajte cez fasádu alebo tieto dve akcie.

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