DI a akcie
Balík ponúka tri rovnocenné vstupné body a vyberáte si pri každom volaní. Fasáda Shops je najkratšia a odporúčaná. RoundlyConsulting\Shops\ShopsManager je koreň fasády — singleton v kontajneri, ktorý si injektujete cez konštruktor a dostanete to isté API ako explicitnú závislosť bez statických volaní. A každá operácia je samostatná trieda akcie s metódou execute(), ktorú zapojíte do vlastných akcií, jobov vo fronte či príkazov.
Injektovaný manažér
Každé volanie manažéra si akciu vyžiada z kontajnera, takže vaše vlastné väzby platia:
use Illuminate\Http\Request;
use RoundlyConsulting\Shops\Cart\Cart;
use RoundlyConsulting\Shops\Orders\DataTransferObjects\PlaceOrderData;
use RoundlyConsulting\Shops\Orders\Order;
use RoundlyConsulting\Shops\ShopsManager;
final class CheckoutController
{
public function __construct(private ShopsManager $shops) {}
public function __invoke(Request $request, Cart $cart): Order
{
return $this->shops->cart($cart)->checkout(PlaceOrderData::fromAddressBook($request->user()));
}
}Priame volanie akcií
use RoundlyConsulting\Shops\Actions\Cart\AddToCartAction;
use RoundlyConsulting\Shops\Actions\Inventory\AdjustStockAction;
use RoundlyConsulting\Shops\Actions\Orders\PlaceOrderAction;
use RoundlyConsulting\Shops\Inventory\Enums\StockReason;
use RoundlyConsulting\Shops\Orders\DataTransferObjects\PlaceOrderData;
app(AddToCartAction::class)->execute($cart, $variant, 2);
app(PlaceOrderAction::class)->execute($cart, new PlaceOrderData);
app(AdjustStockAction::class)->execute($variant, 10, StockReason::Received, $purchaseOrder, 'PO-17');Metóda fasády → akcia
| Fasáda | Akcia |
|---|---|
cart()->add() | Actions\Cart\AddToCartAction |
cart()->update() | Actions\Cart\UpdateCartItemAction |
cart()->remove() | Actions\Cart\RemoveFromCartAction |
cart()->clear() | Actions\Cart\ClearCartAction |
cart()->checkout() | Actions\Orders\PlaceOrderAction |
order()->transition() / cancel() / refund() / fulfil() | Actions\Orders\TransitionOrderStatusAction |
order()->charge() | Actions\Orders\ChargeOrderAction |
order()->quoteShipping() | Actions\Orders\QuoteShippingAction |
inventory()->receive() / returned() / adjust() | Actions\Inventory\AdjustStockAction |
- Shops::fake() dosadí ShopsFake, podtyp ShopsManager, takže fake dostanú aj manažéry injektované cez konštruktor — a rovnako pomocné metódy modelov, ktoré manažér volajú.
- Akcia, ktorú zavoláte priamo, manažér obíde, takže ju fake nezaznamená.
- Vytvorenie objednávky prijíma DTO PlaceOrderData — poskladajte ho ručne alebo cez PlaceOrderData::fromAddressBook($customer).
- AddOrderItemAction, ReserveStockAction a ReleaseStockAction sú @internal — stavebné bloky vytvorenia objednávky a prechodov na zrušenie a vybavenie, nie pre vašu aplikáciu.
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.