v0.1.0 2017-08-01 18:59 UTC

This package is auto-updated.

Last update: 2020-08-03 18:27:53 UTC


README

Cart

Scrutinizer Code Quality Code Coverage License Build Status

Что это такое?

Это простой пакет для хранение товаров в корзине магазина. Он не навязывает свою структуру и вы всегда сможете поменять тип хранения, давай рассмотрим его уже!

Обратите внимание, что для использования необходимо иметь :
- Mysql не ниже версии 5.7.8 (Если вы используете драйвер по-умолчанию)
- Версия PHP не ниже 7.1

Установка

Достаточно выполнить

composer require agoalofalife/cart

Установка конфигураций

В начале было слово...

Каждый раз когда вы создаете класс для корзины, он может иметь свой способ хранения информации (Драйвера).

Например , драйвер базы данных имеет настройки подключения, название таблицы и тому подобное. Давайте рассмотрим как мы можем загрузить конфигурации:

$kernel = new \Cart\Kernel();
$kernel->bootstrapping();
$kernel->loadConfiguration(new \Cart\SourcesConfigurations\File(__DIR__ . '/config/cart.php'));

Метод loadConfiguration принимает обьект типа SourceConfiguration, вы можете использовать класс File по умолчанию передав в конструктор путь до файла, или написать свой класс , реализующий SourceConfiguration.

   // Сервис - провайдеры для настройки ваших драйверов
    'services' => [
        Cart\ServiceProviders\DatabaseServiceProviders::class,
        \Cart\ServiceProviders\RedisServiceProvider::class,
    ],
    'drivers' => [
    // конфигурации в зависимости от драйвера
        'database' => [
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => 'test',
            'username'  => 'test',
            'password'  => 'test',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => ''
        ],
        'redis' => [
            'prefix' => 'cart',
            'scheme' => 'tcp',
            'host'   => '127.0.0.1',
            'port'   => 6379,
        ]
    ],
    // выбранный текущий драйвер
    'storage' => \Cart\Drivers\DatabaseDriver::class

Сверху показан пример структуры конфигурации. storage и services являются обязательными полями, drivers зависит от настройки вашего драйвера. На данном этапе вы можете скопировать этот пример и внести свои настройки.

Драйвера

На данный момент поддерживается два типа драйвера : Redis и база данных.

Использование

Какой драйвер вы будете использовать зависит от настройки в файле конфигурации:

    'storage' => \Cart\Drivers\DatabaseDriver::class

Теперь клиентский код:

$kernel = new \Cart\Kernel();
$kernel->bootstrapping();
$kernel->loadConfiguration((new \Cart\SourcesConfigurations\File(__DIR__ . '/config/cart.php')));
$kernel->loadServiceProvider();
// получение драйвера
$storage = $kernel->getStorage();

После того как драйвер получен мы можем добавлять товар в корзину, удалять его, менять кол -во и очищать корзину полностью.

// Добавление товара в корзину
// id и user_id обязательные поля, так как это индексы по которым происходят другие операции
// вы в праве добавить больше данных..
$storage->add(['id' => 3, 'user_id' => 1]);

// очистить корзину передав user_id
$storage->clear(1);

// изменить кол -во 
$storage->change(['id' => 5, 'user_id' => 1, 'count' => 0])

// удалить конкретный товар из корзины 
$storage->remove(['id' => 2, 'user_id' => 1]);

// Получить список всех товаров по user_id
$storage->get(1);

Помимо этого так же есть возможность изменить цену товара (Например скидка).

// Поле price обязательно.
// Сделать фиксированную скидку
$storage->discount(new \Cart\DiscountStrategy\FixDiscountStrategy(100), ['id' => 3, 'user_id' => 1, 'price' => 200]);

// Осуществить скидку по проценту
$storage->discount(new \Cart\DiscountStrategy\PercentageStrategy(20), ['id' => 3, 'user_id' => 1, 'price' => 200]);

По желанию вы можете дополнить свою стратегию изменения цены, реализовав интерфейс DiscountContract.

Написание своего драйвера

Написать драйвер в три простых шага :

  • По примеру создать свой ServiceProvider для начальных конфигураций и дописать его в файле конфигурации.
    'services' => [
        Cart\ServiceProviders\DatabaseServiceProviders::class,
        \Cart\ServiceProviders\RedisServiceProvider::class,
        ...
    ]
  • Реализовать интерфейс CartDriverContract и для скидки DiscountDriverContract

  • Вставить дравер в файл конфигурации :

  'storage' => \Cart\Drivers\DatabaseDriver::class

Интеграция с Laravel

Для того чтобы интегрировать библиотеку в Laravel необходимо :

  • Установить через composer

  • Выполнить команду :

./vendor/bin/cart migrate:laravel   

Тем самым скопировать файл конфигурации и миграцию в исходные папки Laravel

  • Получить driver из контейнера и работать с ним (Предварительно установив все настройки и выполнив миграцию , если используется драйвер базы данных.)
app('cart')-> ...

Простое использование

  • Установить пакет

composer require agoalofalife/cart

  • Установить свои настройки базы данных
  'drivers' => [
        'database' => [
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => 'test',
            'username'  => 'test',
            'password'  => 'test',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => ''
        ]
  • Выполнить команду для создание таблицы ./vendor/bin/cart cart:migrate

  • Начать использовать драйвер базы данных.

$kernel = new \Cart\Kernel();
$kernel->bootstrapping();
$kernel->loadConfiguration((new \Cart\SourcesConfigurations\File(__DIR__ . '/cart.php')));
$kernel->loadServiceProvider();
$storage = $kernel->getStorage();