NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Shops for Laravel

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:

KontraktKonfiguračný kľúčPredvolenéZodpovednosť
Contracts\PaymentGatewayshops.payment.gatewayPayments\NullPaymentGatewaycharge(Order): PaymentResult, refund(Order, Money): PaymentResult
Contracts\ShippingMethodshops.shipping.methodShipping\FreeShippingMethodquote(Order, Address): Money, label(): string
Contracts\TaxResolvershops.tax.resolverSupport\Tax\DatabaseTaxResolverrateFor(?Shop, string $taxClass, ?string $country): TaxRateValue
Contracts\DiscountResolvershops.discounts.resolverDiscounts\CouponPackageDiscountResolverresolve(string $code, Money $goods): DiscountResult
Orders\NumberGenerators\NumberGeneratorshops.orders.number_generatorOrders\NumberGenerators\DefaultNumberGeneratorgenerate(Order): string
Reviews\Contracts\VerifiedPurchaseResolvershops.reviews.verified_purchase_resolverReviews\NullVerifiedPurchaseResolververified(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ťVlastnostiSpúšťa
OrderPlacedOrder $orderVytvorenie objednávky (PlaceOrderAction), po potvrdení transakcie
OrderStatusChangedOrder $order, Status $from, Status $toKaždý prechod stavu
OrderPaidOrder $order→ Paid
OrderFulfilledOrder $order→ Fulfilled
OrderCanceledOrder $order→ Canceled
OrderRefundedOrder $order→ Refunded (balík počúva cez GrantStoreCreditOnRefund)
StockAdjustedProductVariant $variant, StockAdjustment $adjustmentKaždý zápis zásoby (AdjustStockAction)
StockRanLowProductVariant $variant, int $thresholdRaz, 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ýnimkaKedy nastane
Exceptions\ForeignItemExceptionRiadok 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\InvalidQuantityExceptionMnožstvo mimo 1..32767, zlomok alebo pohyb zásoby, ktorý je nulový alebo má nesprávne znamienko pre svoj dôvod.
Inventory\Exceptions\InsufficientStockExceptionRezervácia alebo predaj nad dostupnú zásobu sledovaného variantu.
Orders\Exceptions\CheckoutRefusedExceptionObjedná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\IllegalStatusTransitionExceptionNepovolený prechod stavu alebo platba za objednávku, ktorá nie je New ani InProgress — nič sa nezmení.
Payments\Exceptions\StoreCreditAlreadyAppliedExceptionKredit uplatnený na jednu objednávku dvakrát.
Payments\Exceptions\StoreCreditBucketNotDenominatedSkupina kreditov nemá menu v credits.currencies.
Payments\Exceptions\StoreCreditCurrencyMismatchMena 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

Odoslaní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.