---
title: "Rozšírenie, udalosti a výnimky — Shops for Laravel | Roundly"
description: "Šesť vymeniteľných driverov, traity pre vlastné modely, servisné triedy, všetky udalosti, ktoré balík spúšťa, a všetky výnimky, ktoré vyhadzuje."
url: https://roundly-consulting.com/sk/open-source/navody/shops-for-laravel/rozsirenie
language: sk
---

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

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

# Rozšírenie, udalosti a výnimky

Provider z konfigurácie naviaže šesť kontraktov. Nastavte konfiguračný kľúč na svoju triedu alebo kontrakt naviažte vo vlastnom service provideri (neskoršia väzba má prednosť). Všetky triedy sú v mennom priestore RoundlyConsulting\\Shops:

| Kontrakt | Konfiguračný kľúč | Predvolené | Zodpovednosť |
| --- | --- | --- | --- |
| `Contracts\PaymentGateway` | `shops.payment.gateway` | `Payments\NullPaymentGateway` | `charge(Order): PaymentResult, refund(Order, Money): PaymentResult` |
| `Contracts\ShippingMethod` | `shops.shipping.method` | `Shipping\FreeShippingMethod` | `quote(Order, Address): Money, label(): string` |
| `Contracts\TaxResolver` | `shops.tax.resolver` | `Support\Tax\DatabaseTaxResolver` | `rateFor(?Shop, string $taxClass, ?string $country): TaxRateValue` |
| `Contracts\DiscountResolver` | `shops.discounts.resolver` | `Discounts\CouponPackageDiscountResolver` | `resolve(string $code, Money $goods): DiscountResult` |
| `Orders\NumberGenerators\NumberGenerator` | `shops.orders.number_generator` | `Orders\NumberGenerators\DefaultNumberGenerator` | `generate(Order): string` |
| `Reviews\Contracts\VerifiedPurchaseResolver` | `shops.reviews.verified_purchase_resolver` | `Reviews\NullVerifiedPurchaseResolver` | `verified(Model $author, Product $product): bool` |

```php
// AppServiceProvider::register()
$this->app->bind(\RoundlyConsulting\Shops\Contracts\PaymentGateway::class, AcmePayGateway::class);
```

Balík obsahuje aj Support\\Tax\\ConfigTaxResolver a Reviews\\DatabaseVerifiedPurchaseResolver. Vymeniteľné modely: shops.shop\_model (tenant) a shops.discounts.coupon\_model (podtrieda Coupon z balíka coupons).

## Traity pre vlastné modely

BelongsToShop, HasPublishing a HasTranslations fungujú na ľubovoľnom modeli. Pre preklady implementujte Translatable a každý preložiteľný atribút castujte na array:

```php
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Shops\Concerns\BelongsToShop;
use RoundlyConsulting\Shops\Concerns\HasPublishing;
use RoundlyConsulting\Shops\Concerns\HasTranslations;
use RoundlyConsulting\Shops\Contracts\Translatable;

final class Banner extends Model implements Translatable
{
    use BelongsToShop, HasPublishing, HasTranslations;

    public function translatableAttributes(): array
    {
        return ['headline'];
    }

    protected function casts(): array
    {
        return ['headline' => 'array', 'published_at' => 'datetime'];
    }
}

Banner::query()->forShop($shop)->published()->get();
```

## Servisné triedy

- Orders\\AddressBook (Shops::addresses()) — prevádza adresy z addresses-for-laravel na objekty Address objednávky (defaults() vracia OrderAddresses, map()).
- Payments\\StoreCreditTender — uplatňuje kredit v obchode (apply()) a vracia ho (restore(), ktoré spúšťa cancel()).
- Shops\\CurrentShop (Shops::current()) — aktívny tenant, scoped pre každý request a každý job vo fronte.
- Support\\ShopModel (class(), query(), shop()) a Support\\CouponModel (class()) — vracajú nakonfigurované modely. ShopModel::shop() vráti nakonfigurovaný tenant, ak rozširuje Shop, inak samotný Shop — triedu, ktorú vytvára ShopFactory z balíka.
- Support\\Casts\\AddressCast — cast JSON ⇄ Address, použiteľný aj na vlastných modeloch.

## Udalosti

| Udalosť | Vlastnosti | Spúšťa |
| --- | --- | --- |
| `OrderPlaced` | `Order $order` | Vytvorenie objednávky (PlaceOrderAction), po potvrdení transakcie |
| `OrderStatusChanged` | `Order $order, Status $from, Status $to` | Každý prechod stavu |
| `OrderPaid` | `Order $order` | → Paid |
| `OrderFulfilled` | `Order $order` | → Fulfilled |
| `OrderCanceled` | `Order $order` | → Canceled |
| `OrderRefunded` | `Order $order` | → Refunded (balík počúva cez GrantStoreCreditOnRefund) |
| `StockAdjusted` | `ProductVariant $variant, StockAdjustment $adjustment` | Každý zápis zásoby (AdjustStockAction) |
| `StockRanLow` | `ProductVariant $variant, int $threshold` | Raz, keď úprava zníži dostupnú zásobu sledovaného variantu zo stavu nad prahom na prah alebo pod neho |

Počas vytvorenia objednávky spúšťa coupons-for-laravel vlastné udalosti CouponRedeemed, CouponRedemptionFailed a CouponExhausted.

## Výnimky

Výnimky balíka rozširujú abstraktnú RoundlyConsulting\\Shops\\Exceptions\\ShopsException (RuntimeException):

| Výnimka | Kedy nastane |
| --- | --- |
| `Exceptions\ForeignItemException` | Riadok košíka upravovaný alebo odstraňovaný cez iný košík alebo vrátenie zaúčtované na objednávku, na ktorej variant nikdy nebol — nič sa nezapíše. |
| `Exceptions\InvalidQuantityException` | Množstvo mimo 1..32767, zlomok alebo pohyb zásoby, ktorý je nulový alebo má nesprávne znamienko pre svoj dôvod. |
| `Inventory\Exceptions\InsufficientStockException` | Rezervácia alebo predaj nad dostupnú zásobu sledovaného variantu. |
| `Orders\Exceptions\CheckoutRefusedException` | Objednávka z prázdneho košíka (aj druhé, dvakrát odoslané vytvorenie), s riadkom, ktorého variant bol medzitým zmazaný ($cartItem ho určí), alebo so zápornou cenou dopravy — vyhodí sa skôr, než sa čokoľvek zapíše. |
| `Orders\Exceptions\IllegalStatusTransitionException` | Nepovolený prechod stavu alebo platba za objednávku, ktorá nie je New ani InProgress — nič sa nezmení. |
| `Payments\Exceptions\StoreCreditAlreadyAppliedException` | Kredit uplatnený na jednu objednávku dvakrát. |
| `Payments\Exceptions\StoreCreditBucketNotDenominated` | Skupina kreditov nemá menu v credits.currencies. |
| `Payments\Exceptions\StoreCreditCurrencyMismatch` | Mena skupiny sa líši od meny objednávky. |

Chyby peňazí pochádzajú z money-for-laravel a ShopsException nerozširujú — okrem iných CurrencyMismatch (variant v inej mene, zmena meny stĺpca ceny, aritmetika naprieč menami), UnknownCurrency a InvalidMoneyValue. Balíky sluggable, coupons a credits vyhadzujú vlastné výnimky.

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