vsevolod-ryzhov/yii2-cart
Composer 安装命令:
composer require vsevolod-ryzhov/yii2-cart
包简介
Yii2 cart component
README 文档
README
Yii2 cart component for eCommerce web applications
Installation
Via Composer
composer require vsevolod-ryzhov/yii2-cart
Usage
Use CombinedStorage if you want to use all provided functionality.
- To use session as cart storage:
// setup Cart component using included SessionStorage class class Init implements BootstrapInterface { public function bootstrap($app): void { $container = Yii::$container; $container->setSingleton(Cart::class, [], [ new SessionStorage('cart', $app->session), new BaseCost() ]); } } // Product class must implement ProductInterface class Product implements ProductInterface { public function getId() { return $this->id; } public function getPrice() { return $this->price; } } // inject component in your controller class CartController extends Controller { /** * @var Cart */ private $cart; public function __construct($id, $module, Cart $cart, $config = []) { parent::__construct($id, $module, $config); $this->cart = $cart; } public function actionAdd($id, $count = 1) { $product = Product::findOne($id); $this->cart->add($product, $count); } }
- To use database storage (for authenticated users) and session storage (for guests):
// create converter class which extends included AbstractProductConverter // this class must convert your Product model class to CartItem class // this class is used in Init class on DatabaseStorage initialization class ProductToCartConverter extends AbstractProductConverter { public function convertProductToCartItem($product, int $quantity): CartItem { /* @var $product Product */ return new CartItem($product, $quantity); } } // setup Cart component using included SessionStorage class class Init implements BootstrapInterface { public function bootstrap($app): void { $container = Yii::$container; if ($app->user->isGuest) { $container->setSingleton(Cart::class, [], [ new SessionStorage('cart', $app->session), new BaseCost() ]); } else { // you can specify database options for DatabaseStorage class (cartItemsTable & etc) $container->setSingleton(Cart::class, [], [ new DatabaseStorage($app->user->id, $app->db, new ProductsQuery(Product::class), new ProductToCartConverter), new BaseCost() ]); } } } // Query class for Product model must extends included AbstractProductQuery class ProductsQuery extends AbstractProductQuery { /** * @return ProductsQuery */ public function canBuy(): ActiveQuery { // query product which user can buy return $this->active()->available(); } }
- To use CookieStorage:
// use ProductToCartConverter from previews sample class Init implements BootstrapInterface { $container->setSingleton(Cart::class, [], [ new CookieStorage( new CookieStorageSettings('cart', 3600), $app->request->cookies, $app->response->cookies, new ProductsQuery(Product::class), new ProductToCartConverter ), new BaseCost() ]); }
- CombinedStorage (CookieStorage + DatabaseStorage):
class Init implements BootstrapInterface { public function bootstrap($app): void { $container = Yii::$container; $container->setSingleton(Cart::class, [], [ new CombinedStorage( $app->user, $app->db, new CookieStorageSettings('cart', 3600), $app->request->cookies, $app->response->cookies, new ProductsQuery(Product::class), new ProductToCartConverter ), new BaseCost() ]); } }
统计信息
- 总下载量: 12
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-05-28