Konfigurácia
Balík funguje bez akejkoľvek konfigurácie. Publikovaný config/shops.php celý (bez komentárov):
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:
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 kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
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.