thenbsp/cart-bundle

Shopping Cart Bundle for Symfony2

v1.0.0 2015-11-27 09:26 UTC

This package is not auto-updated.

Last update: 2024-11-09 18:43:36 UTC


README

安装

composer require thenbsp/cart-bundle

配置

1、注册 Bundle:

// app/AppKernel.php

public function registerBundles()
{
    return array(
        // ...
        new Thenbsp\CartBundle\ThenbspCartBundle()
        // ...
    );
}

2、实现商品接口:

实现商品接口 Thenbsp\CartBundle\Core\EntityInterface,该接口包含以下方法:

// src/AppBundle/Entity/Product.php

use Doctrine\ORM\Mapping AS ORM;
use Thenbsp\CartBudnle\Core\EntityInterface;

/**
 * @ORM\Entity
 * @ORM\Table(name="products")
 */
class Product implements EntityInterface
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="decimal", precision=10, scale=2)
     */
    protected $price;

    /**
     * @ORM\Column(type="text")
     */
    protected $description;

    /**
     * 返回商品唯一标识
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * 返回商品单价
     */
    public function getPrice()
    {
        return $this->price;
    }

    // ...
}

使用

$cart = $this->get('thenbsp_cart');

事件

监听添加到购物车事件:

// src/EventListener/CartListener.php

use Thenbsp\CartBundle\Event\Events;
use Thenbsp\CartBundle\Event\ItemEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class CartListener implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return array(
            Events::ADD_BEFORE => 'onCartAddBefore'
        );
    }
    public function onCartAddBefore(ItemEvent $event)
    {
        // 被添加到购物车的商品对象
        $entity = $event->getEntity();

        // 商品的数量
        $quantity = $event->getQuantity();

        // 如果商品状态为 “已禁用”,则不添加到购物车
        if( $entity->getStatus() === 'disabled' ) {
            $event->stopPropagation();
        }
    }
}

订阅监听器:

// src/AppBundle/Resources/config/services.yml

cart.listener:
        class: AppBundle\EventListener\CartListener
        tags:
            - { name: kernel.event_subscriber }