---
title: "DI a akcie — Coupons for Laravel | Roundly"
description: "Namiesto fasády injektujte CouponManager alebo jednoúčelové akcie spúšťajte sami — vrátane úplnej mapy metód fasády na akcie."
url: https://roundly-consulting.com/sk/open-source/navody/coupons-for-laravel/bez-fasady
language: sk
---

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

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

# DI a akcie

Fasáda je odporúčaná voľba, nie jediná cesta. Balík ponúka tri rovnocenné vstupné body a všetky spúšťajú ten istý kód:

- Fasáda Coupons — najkratší zápis, odporúčaný na bežné volania.
- Manažér RoundlyConsulting\\Coupons\\CouponManager — koreň fasády. Injektujte ho cez konštruktor a získate rovnaké API ako explicitnú závislosť, bez statických volaní.
- Akcie — jednoúčelové triedy v RoundlyConsulting\\Coupons\\Actions s jedinou metódou execute(), ktoré skladáte do vlastných akcií, jobov a príkazov.

## Injektovanie manažéra

```php
use RoundlyConsulting\Coupons\CouponManager;
use RoundlyConsulting\Coupons\DataTransferObjects\RedemptionResult;
use RoundlyConsulting\Money\Money;

final class ApplyCoupon
{
    public function __construct(private CouponManager $coupons) {}

    public function __invoke(string $code, Money $cart, User $user): RedemptionResult
    {
        return $this->coupons->code($code)->redeem($cart, $user);
    }
}
```

Coupons::fake() nahradí manažéra pre fasádu aj pre každý injektovaný CouponManager — manažér nie je final, aby ho fake mohol rozšíriť —, takže triedu s injektovaným manažérom testujete rovnako ako triedu, ktorá volá fasádu.

## Spustenie akcie

Každá operácia je aj samostatná trieda akcie, ktorú si môžete vyžiadať z kontajnera a spustiť sami. Väčšina berie bežné argumenty; CreateCouponAction berie DTO CreateCouponData a RedeemCouponAction DTO RedeemCouponData:

```php
use RoundlyConsulting\Coupons\Actions\{CheckCouponAction, CreateCouponAction, ExpireCouponsAction,
    PruneCouponsAction, RedeemCouponAction, RevokeCouponAction};
use RoundlyConsulting\Coupons\DataTransferObjects\RedeemCouponData;

app(CreateCouponAction::class)->execute($data);                  // Coupon; quiet: true skips CouponCreated
app(CheckCouponAction::class)->execute('SUMMER', $cart, $user);   // ?RedemptionFailureReason
app(RedeemCouponAction::class)->execute(new RedeemCouponData(coupon: 'SUMMER', price: $cart, redeemer: $user));
app(RevokeCouponAction::class)->execute($coupon);
app(ExpireCouponsAction::class)->execute();                       // int
app(PruneCouponsAction::class)->execute(days: 30, force: false);  // int
```

Manažér si akciu vyžiada z kontajnera až pri volaní metódy. Akcia, ktorú spustíte sami, manažéra obíde, takže ju Coupons::fake() nezaznamená — v testoch preto overujte databázu a udalosti. Model Coupon, trait HasCoupons, pravidlo Redeemable aj oba Artisan príkazy idú cez manažéra.

## Metóda fasády → akcia

| Metóda fasády | Akcia | Poznámka |
| --- | --- | --- |
| `generate(), create()` | `CreateCouponAction` | Berie DTO CreateCouponData; generate() ho zostaví za vás. |
| `createQuietly()` | `CreateCouponAction` | execute($data, quiet: true) — bez CouponCreated. |
| `check()` | `CheckCouponAction` | execute($coupon, $price, $redeemer) — nevyhadzuje výnimky, nezamyká ani nezapisuje. |
| `redeem()` | `RedeemCouponAction` | Berie DTO RedeemCouponData (coupon, price, redeemer). |
| `revoke()` | `RevokeCouponAction` | Berie model Coupon; kód najprv prevedie na model manažér. |
| `expireAll()` | `ExpireCouponsAction` | execute(?string $code = null): int |
| `prune()` | `PruneCouponsAction` | execute(int $days = 30, bool $force = false): int |
| `preview()` | — | Coupon::previewDiscount() nad nájdeným modelom. |
| `find(), findOrFail(), exists(), redeemable()` | — | Dopyt nad modelom nastaveným v coupons.model. |
| `code()` | — | Handle CouponCode nad check(), preview(), redeem() a revoke(). |

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