---
title: "Konfigurácia — Shops for Laravel | Roundly"
description: "Každý konfiguračný kľúč a jeho predvolená hodnota — model tenanta, ceny, dane, sklad, médiá, recenzie, slugy, platby, doprava, zľavy a čísla objednávok."
url: https://roundly-consulting.com/sk/open-source/navody/shops-for-laravel/konfiguracia
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)

# Konfigurácia

Balík funguje bez akejkoľvek konfigurácie. Publikovaný config/shops.php celý (bez komentárov):

```php
use RoundlyConsulting\Coupons\Models\Coupon;
use RoundlyConsulting\Shops\Discounts\CouponPackageDiscountResolver;
use RoundlyConsulting\Shops\Orders\NumberGenerators\DefaultNumberGenerator;
use RoundlyConsulting\Shops\Payments\NullPaymentGateway;
use RoundlyConsulting\Shops\Reviews\NullVerifiedPurchaseResolver;
use RoundlyConsulting\Shops\Shipping\FreeShippingMethod;
use RoundlyConsulting\Shops\Shops\Shop;
use RoundlyConsulting\Shops\Support\Tax\DatabaseTaxResolver;

return [
    'shop_model' => env('SHOPS_SHOP_MODEL', Shop::class),
    'key_type' => env('SHOPS_KEY_TYPE', 'bigint'),

    'pricing' => [
        'price_type' => env('SHOPS_PRICE_TYPE', 'gross'),
        'default_currency' => env('SHOPS_DEFAULT_CURRENCY', 'EUR'),
    ],

    'tax_classes' => [
        'standard' => env('SHOPS_TAX_RATE', 20),
        'reduced' => 10,
        'zero' => 0,
    ],

    'tax' => [
        'resolver' => DatabaseTaxResolver::class,
    ],

    'inventory' => [
        'low_stock_threshold' => env('SHOPS_LOW_STOCK_THRESHOLD', 0),
    ],

    'media' => [
        'featured_bucket' => env('SHOPS_MEDIA_FEATURED_BUCKET', 'featured'),
        'gallery_bucket' => env('SHOPS_MEDIA_GALLERY_BUCKET', 'gallery'),
        'variant_bucket' => env('SHOPS_MEDIA_VARIANT_BUCKET', 'gallery'),
        'banner_bucket' => env('SHOPS_MEDIA_BANNER_BUCKET', 'banner'),
        'disk' => env('SHOPS_MEDIA_DISK'),
        'public' => env('SHOPS_MEDIA_PUBLIC', true),
        'responsive_widths' => [320, 640, 1024, 1600],
        'max_file_size' => null,
    ],

    'reviews' => [
        'verified_purchase_resolver' => env(
            'SHOPS_VERIFIED_PURCHASE_RESOLVER',
            NullVerifiedPurchaseResolver::class,
        ),
    ],

    'attributes' => [
        'definitions' => [
            // 'material' => ['type' => 'string'],
            // 'weight'   => ['type' => 'integer', 'rules' => ['min:0']],
        ],
    ],

    'locales' => [
        'fallback' => env('SHOPS_FALLBACK_LOCALE', config('app.fallback_locale', 'en')),
    ],

    'slugs' => [
        'history' => env('SHOPS_SLUG_HISTORY', false),
    ],

    'payment' => [
        'gateway' => env('SHOPS_PAYMENT_GATEWAY', NullPaymentGateway::class),
        'allow_store_credit' => env('SHOPS_ALLOW_STORE_CREDIT', false),
        'store_credit_bucket' => env('SHOPS_STORE_CREDIT_BUCKET', 'store_credit'),
        'refund_to_store_credit' => env('SHOPS_REFUND_TO_STORE_CREDIT', false),
    ],

    'shipping' => [
        'method' => env('SHOPS_SHIPPING_METHOD', FreeShippingMethod::class),
    ],

    'discounts' => [
        'coupon_model' => env('SHOPS_COUPON_MODEL', Coupon::class),
        'resolver' => CouponPackageDiscountResolver::class,
    ],

    'addresses' => [
        'billing_same_as_shipping' => env('SHOPS_BILLING_SAME_AS_SHIPPING', true),
    ],

    'orders' => [
        'number_generator' => DefaultNumberGenerator::class,
    ],
];
```

## Všetky kľúče

| Kľúč | Predvolené | Env | Účel |
| --- | --- | --- | --- |
| `shop_model` | Shops\\Shop | `SHOPS_SHOP_MODEL` | Model tenanta, na ktorý ukazuje každé shop\_id — ľubovoľný Eloquent model; trieda, ktorá ním nie je, vyhodí InvalidConfigurationException s názvom kľúča. Rozšírte Shop, aby ste si zachovali funkcie tenanta. |
| `key_type` | bigint | `SHOPS_KEY_TYPE` | Typ kľúča polymorfných stĺpcov customer, owner a reference: bigint, uuid alebo ulid. Iná hodnota vyhodí pri spustení migrácií InvalidConfigurationException. Po ich spustení sa už nedá zmeniť. |
| `pricing.price_type` | gross | `SHOPS_PRICE_TYPE` | gross (daň sa z ceny vyčlení) alebo net (daň sa pripočíta); iná hodnota vyhodí InvalidConfigurationException so zoznamom oboch. Objednávky si ho zafixujú. |
| `pricing.default_currency` | EUR | `SHOPS_DEFAULT_CURRENCY` | Záložná mena ISO 4217 pre obchod bez vlastnej meny, objednávku bez obchodu a predvolený variant produktu bez obchodu. |
| `tax_classes` | standard 20, reduced 10, zero 0 | `SHOPS_TAX_RATE` | Záložné sadzby v celých percentách, keď obchod nemá zodpovedajúcu sadzbu v databáze. Každá sadzba je 0 – 100, číslo alebo reťazec ako „21“; „twenty“ či „19.5“ vyhodí výnimku namiesto sadzby 0 %. Dodaná trieda, ktorej sadzba nie je nastavená — vynechaná, null alebo prázdna (SHOPS\_TAX\_RATE=) — dostane dodanú sadzbu (standard 20 %, reduced 10 %, zero 0 %), nikdy nie 0 %; vaša vlastná trieda bez nastavenej sadzby použije sadzbu standard a prázdna mapa znamená dodané sadzby. Bez dane nastavte výslovne 0. Env nastavuje len standard. |
| `tax.resolver` | DatabaseTaxResolver | — | Určí sadzbu pre kombináciu (obchod, trieda, krajina). Pre dane len z konfigurácie nastavte ConfigTaxResolver. |
| `inventory.low_stock_threshold` | 0 | `SHOPS_LOW_STOCK_THRESHOLD` | StockRanLow sa spustí raz, keď úprava zníži dostupnú zásobu sledovaného variantu zo stavu nad touto úrovňou na ňu alebo pod ňu. Aspoň 0; neceločíselná hodnota vyhodí výnimku. |
| `media.featured_bucket` | featured | `SHOPS_MEDIA_FEATURED_BUCKET` | Skupina s jedným hlavným obrázkom produktu. |
| `media.gallery_bucket` | gallery | `SHOPS_MEDIA_GALLERY_BUCKET` | Skupina galérie produktu. |
| `media.variant_bucket` | gallery | `SHOPS_MEDIA_VARIANT_BUCKET` | Skupina obrázkov variantu. |
| `media.banner_bucket` | banner | `SHOPS_MEDIA_BANNER_BUCKET` | Skupina bannera kategórie (jeden obrázok). |
| `media.disk` | null | `SHOPS_MEDIA_DISK` | Disk pre všetky skupiny katalógu; nenastavená hodnota (null alebo prázdna) použije predvolený disk media-library. |
| `media.public` | true | `SHOPS_MEDIA_PUBLIC` | Verejná (CDN, SEO) alebo súkromná viditeľnosť všetkých skupín katalógu. |
| `media.responsive_widths` | \[320, 640, 1024, 1600\] | — | Rebrík responzívnych šírok; každá šírka sa vygeneruje ako variant responsive-<šírka>. Každá šírka musí byť kladné celé číslo — chybná či prázdna položka vyhodí výnimku, nevynechá sa. |
| `media.max_file_size` | null | — | Voliteľný limit v bajtoch na obrázok pre všetky skupiny katalógu — produkt, variant aj kategóriu. Nenastavená hodnota (null alebo prázdna) znamená bez limitu; inak aspoň 1. |
| `reviews.verified_purchase_resolver` | NullVerifiedPurchaseResolver | `SHOPS_VERIFIED_PURCHASE_RESOLVER` | Rozhoduje, či Product::review() vopred označí recenziu ako overený nákup. |
| `attributes.definitions` | \[\] | — | Definície špecifikácie produktu podľa názvu, registrované pri štarte. |
| `locales.fallback` | app.fallback\_locale | `SHOPS_FALLBACK_LOCALE` | Záložný jazyk pre preklady a slugy; odvodzuje sa z neho SKU predvoleného variantu. |
| `slugs.history` | false | `SHOPS_SLUG_HISTORY` | Uchováva vyradené slugy a na staré URL odpovedá presmerovaním 301 na aktuálne. |
| `payment.gateway` | NullPaymentGateway | `SHOPS_PAYMENT_GATEWAY` | Strháva platby za objednávky. Refundácie riadi vaša aplikácia. |
| `payment.allow_store_credit` | false | `SHOPS_ALLOW_STORE_CREDIT` | Shops::order($order)->charge() pred platobnou bránou uplatní kredit kupujúceho. |
| `payment.store_credit_bucket` | store\_credit | `SHOPS_STORE_CREDIT_BUCKET` | Použitá skupina kreditov; musí byť v mene objednávky. |
| `payment.refund_to_store_credit` | false | `SHOPS_REFUND_TO_STORE_CREDIT` | Pri OrderRefunded vráti konečnú cenu objednávky ako kredit v obchode. |
| `shipping.method` | FreeShippingMethod | `SHOPS_SHIPPING_METHOD` | Váš ShippingMethod; pri vytvorení objednávky cez neho vypočíta cenu dopravy na doručovaciu adresu. |
| `discounts.coupon_model` | Coupon (coupons) | `SHOPS_COUPON_MODEL` | Model za $order->coupon: Coupon z balíka coupons alebo vaša jeho podtrieda. Čokoľvek iné vyhodí InvalidConfigurationException s názvom kľúča. |
| `discounts.resolver` | CouponPackageDiscountResolver | — | Z kódu a medzisúčtu tovaru vytvorí DiscountResult. |
| `addresses.billing_same_as_shipping` | true | `SHOPS_BILLING_SAME_AS_SHIPPING` | fromAddressBook() použije primárnu doručovaciu adresu ako fakturačnú, ak fakturačná chýba. |
| `orders.number_generator` | DefaultNumberGenerator | — | Generuje číslo objednávky; musí implementovať NumberGenerator. |

## Prostredie (env)

Bežné nastavenia sa riadia cez env, takže konfiguráciu publikujete len zriedka:

```bash
SHOPS_PRICE_TYPE=gross
SHOPS_DEFAULT_CURRENCY=EUR
SHOPS_TAX_RATE=20
SHOPS_LOW_STOCK_THRESHOLD=5
SHOPS_MEDIA_DISK=s3
SHOPS_SLUG_HISTORY=true
SHOPS_ALLOW_STORE_CREDIT=true
SHOPS_PAYMENT_GATEWAY='App\Payments\AcmePayGateway'
```

Prepínače typu bool prijmú true/false, 1/0, on/off aj yes/no, takže funguje akýkoľvek zápis v env. Čokoľvek iné vyhodí InvalidConfigurationException s názvom kľúča, takže preklep sa nikdy potichu nezmení na predvolenú hodnotu.

## Prísne hodnoty

Ostatné nastavenia sú rovnako prísne. Nenastavený kľúč — vynechaný, null alebo prázdny ('' či len medzery, napríklad riadok SHOPS\_DEFAULT\_CURRENCY=) — dostane predvolenú hodnotu; hodnota nesprávneho tvaru vyhodí InvalidConfigurationException s názvom kľúča — nič sa nepretypuje na 0 ani nenahradí predvolenou hodnotou:

- Celé čísla prijmú int alebo reťazec s celým číslom, napríklad „5“ — nikdy „five“ ani „5.5“. Sadzby daňových tried musia byť 0 – 100, prah nízkej zásoby aspoň 0, každá responzívna šírka aj max\_file\_size aspoň 1.
- pricing.price\_type musí byť gross alebo net; key\_type musí byť bigint, uuid alebo ulid.
- Názvy — mena, názvy skupín, disk médií a záložný jazyk — musia byť reťazce; prázdny názov sa počíta ako nenastavený a dostane predvolenú hodnotu, takže prázdne SHOPS\_MEDIA\_DISK= znamená disk balíka médií.
- tax\_classes, media.responsive\_widths a attributes.definitions musia byť polia a každá definícia atribútu samostatné pole. Každá responzívna šírka musí byť skutočná šírka — prázdna položka v zozname vyhodí výnimku.
- Daňová trieda bez nastavenej sadzby dostane dodanú sadzbu, takže prázdne SHOPS\_TAX\_RATE= stále účtuje dodaných 20 % pre triedu standard — ak nechcete účtovať žiadnu daň, nastavte SHOPS\_TAX\_RATE=0.
- shop\_model musí byť Eloquent model; discounts.coupon\_model musí byť Coupon z balíka coupons alebo jeho podtrieda.

php artisan about zobrazí chybné nastavenie ako INVALID namiesto zlyhania, takže ho hneď nájdete.

## Poznámky

- tax\_classes sa zadáva v celých percentách (20 = 20 %) pre pohodlie; sadzby v databáze sú v bázických bodoch (1900 = 19,00 %).
- Obchod môže mať vlastnú menu a každá objednávka si pri vložení zafixuje svoju menu — zmena pricing.default\_currency nikdy neprepočíta už vytvorené objednávky.
- Kredit v obchode vyžaduje, aby mapa currencies balíka credits-for-laravel určila menu skupiny payment.store\_credit\_bucket.
- Kľúče driverov prijmú ľubovoľnú triedu, ktorá implementuje kontrakt — alebo kontrakt naviažte sami v service provideri.

## 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)
