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 |
// 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:
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 a Support\CouponModel — vracajú nakonfigurované modely (class(), pri ShopModel aj query()).
- 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 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.