koind/

multi-basket

这是一个可以用于任何PHP框架的篮子通用组件。

1.0 2018-07-17 20:52 UTC

This package is not auto-updated.

Last update: 2024-09-29 06:02:32 UTC


README

这是一个可以用于任何PHP框架的篮子通用组件。

安装

从您的终端运行以下命令

composer require "koind/multi-basket: ^1.0"

或者将此添加到您的composer.json文件中的require部分

"koind/multi-basket": "^1.0"

然后运行 composer update

使用方法

首先,您需要插入所需的类并初始化这些类。接下来,通过传递适当的参数创建Cart类的实例。恭喜,您现在可以使用篮子的功能了。

<?php 

use koind\storage\LaravelHybridStorage;
use koind\Cart;
use koind\cost\SimpleCost;
use koind\cost\MinCost;
use koind\cost\FridayCost;
use koind\cost\NewYearCost;

require __DIR__ . '/vendor/autoload.php';

$storage = new LaravelHybridStorage('cart');

$simpleCost = new SimpleCost();
$calculator = new MinCost(
    new FridayCost($simpleCost, 5, date('Y-m-d')),
    new NewYearCost($simpleCost, date('m'), 3)
);

$cart = new Cart($storage, $calculator);
$cart->add(5, 6, 100);

可用方法

以下方法可用

koind\Cart
public function getItems(): array
public function add(int $id, int $count, int $price): void
public function subtractCount(int $id, int $count, int $price): void
public function getCost(): float
public function remove(int $id): void
public function clear(): void
koind\CartItem
public function getId(): int
public function getCount(): float
public function getPrice(): float
public function getCost(): float
koind\cost\CalculatorInterface

此接口实现了所有必需的折扣类。

public function getCost(array $items): float
koind\storage\StorageInterface

此接口实现了所有所需的数据存储类。

public function load(): array
public function save(array $items): void

示例用法类 Cart

获取购物车中所有产品

$this->cart->getItems();

将新产品添加到您的购物车

$this->cart->add(3, 4, 1000);

更改产品的数量

$this->cart->subtractCount(3, 2, 1000);

获取商品总价,包括所有折扣

$this->cart->getCost();

从购物车中移除产品

$this->cart->remove(3);

清空购物车

$this->cart->clear();

不同的存储

不同框架的存储实现示例。

koind\storage\LaravelSessionStorage - 用于Laravel
<?php

namespace koind\storage;

use koind\CartItem;
use Illuminate\Contracts\Session\Session;

class LaravelSessionStorage implements StorageInterface
{
    private $session;
    private $sessionKey;

    public function __construct(Session $session, $sessionKey = 'cart')
    {
        $this->session = $session;
        $this->sessionKey = $sessionKey;
    }

    /**
     * @return CartItem[]
     */
    public function load(): array
    {
        return $this->session->get($this->sessionKey, []);
    }

    /**
     * @param CartItem[] $items
     */
    public function save(array $items): void
    {
        $this->session->put($this->sessionKey, $items);
    }
}
koind\storage\SymfonySessionStorage - 用于Symfony
<?php

namespace koind\storage;

use koind\CartItem;
use Symfony\Component\HttpFoundation\Session\Session;

class SymfonySessionStorage implements StorageInterface
{
    private $session;
    private $sessionKey;

    public function __construct(Session $session, $sessionKey = 'cart')
    {
        $this->session = $session;
        $this->sessionKey = $sessionKey;
    }

    /**
     * @return CartItem[]
     */
    public function load(): array
    {
        return $this->session->get($this->sessionKey, []);
    }

    /**
     * @param CartItem[] $items
     */
    public function save(array $items): void
    {
        $this->session->set($this->sessionKey, $items);
    }
}
koind\storage\YiiSessionStorage - 用于Yii
<?php

namespace koind\storage;

use koind\CartItem;
use Yii;

class YiiSessionStorage implements StorageInterface
{
    private $sessionKey;

    public function __construct($sessionKey = 'cart')
    {
        $this->sessionKey = $sessionKey;
    }

    /**
     * @return CartItem[]
     */
    public function load(): array
    {
        return Yii::$app->session->get($this->sessionKey, []);
    }

    /**
     * @param CartItem[] $items
     */
    public function save(array $items): void
    {
        Yii::$app->session->set($this->sessionKey, $items);
    }
}

如果您需要其他框架的组件,您可以轻松实现接口 StorageInterface

测试

从您的终端运行以下命令

phpunit