agoalofalife / cart
Requires
- php: >=7.1
- illuminate/config: ^5.4
- illuminate/container: ^5.4
- illuminate/database: ^5.4
- illuminate/events: ^5.4
- predis/predis: ^1.1
- symfony/console: ^3.3
- symfony/finder: ^3.3
Requires (Dev)
- fzaninotto/faker: ^1.6
- larapack/dd: ^1.1
- mockery/mockery: ^0.9.9
- phpunit/phpunit: ^6.1
- symfony/var-dumper: ^3.3.5
This package is auto-updated.
Last update: 2024-10-29 05:22:21 UTC
README
Cart
Что это такое?
Это простой пакет для хранение товаров в корзине магазина. Он не навязывает свою структуру и вы всегда сможете поменять тип хранения, давай рассмотрим его уже!
- Требования
- Установка
- Установка конфигураций
- Драйвера
- Написание своего драйвера
- Интеграция с Laravel
- Простое использование
Обратите внимание, что для использования необходимо иметь :
- 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 необходимо :
-
Установить через 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();