承接 vsevolod-ryzhov/yii2-cart 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

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.

  1. 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);
    }
}
  1. 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();
    }
}
  1. 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()
    ]);
}
  1. 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

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-05-28

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固