2017 © Pedro PelΓ‘ez
 

library cart

image

agoalofalife/cart

  • Tuesday, August 1, 2017
  • by agoalofalife
  • Repository
  • 1 Watchers
  • 0 Stars
  • 0 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 2 Versions
  • 0 % Grown

The README.md

Cart

Scrutinizer Code Quality Code Coverage License Build Status, (*1)

Π§Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?, (*2)

Π­Ρ‚ΠΎ простой ΠΏΠ°ΠΊΠ΅Ρ‚ для Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°. Он Π½Π΅ навязываСт свою структуру ΠΈ Π²Ρ‹ всСгда смоТСтС ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ хранСния, Π΄Π°Π²Π°ΠΉ рассмотрим Π΅Π³ΠΎ ΡƒΠΆΠ΅!, (*3)

, (*4)

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ для использования Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ :
- Mysql Π½Π΅ Π½ΠΈΠΆΠ΅ вСрсии 5.7.8 (Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ)
- ВСрсия PHP Π½Π΅ Π½ΠΈΠΆΠ΅ 7.1

Установка, (*5)

Достаточно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, (*6)

composer require agoalofalife/cart

Установка ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ, (*7)

Π’ Π½Π°Ρ‡Π°Π»Π΅ Π±Ρ‹Π»ΠΎ слово..., (*8)

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ создаСтС класс для ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свой способ хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (Π”Ρ€Π°ΠΉΠ²Π΅Ρ€Π°)., (*9)

НапримСр , Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ настройки ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ:, (*10)

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

ΠœΠ΅Ρ‚ΠΎΠ΄ loadConfiguration ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŒΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° SourceConfiguration, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс File ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π² конструктор ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ Ρ„Π°ΠΉΠ»Π°, ΠΈΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой класс , Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ SourceConfiguration., (*11)

   // БСрвис - ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ для настройки Π²Π°ΡˆΠΈΡ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ²
    '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 зависит ΠΎΡ‚ настройки вашСго Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. На Π΄Π°Π½Π½ΠΎΠΌ этапС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈ внСсти свои настройки., (*12)

Π”Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, (*13)

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ поддСрТиваСтся Π΄Π²Π° Ρ‚ΠΈΠΏΠ° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° : Redis ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…., (*14)

ИспользованиС, (*15)

Какой Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ зависит ΠΎΡ‚ настройки Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ:, (*16)

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ клиСнтский ΠΊΠΎΠ΄:, (*17)

$kernel = new \Cart\Kernel();
$kernel->bootstrapping();
$kernel->loadConfiguration((new \Cart\SourcesConfigurations\File(__DIR__ . '/config/cart.php')));
$kernel->loadServiceProvider();
// ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°
$storage = $kernel->getStorage();

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ²Π°Ρ€ Π² ΠΊΠΎΡ€Π·ΠΈΠ½Ρƒ, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ, ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ» -Π²ΠΎ ΠΈ ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ ΠΊΠΎΡ€Π·ΠΈΠ½Ρƒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ., (*18)

// Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ²Π°Ρ€Π° Π² ΠΊΠΎΡ€Π·ΠΈΠ½Ρƒ
// 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);

Помимо этого Ρ‚Π°ΠΊ ΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ†Π΅Π½Ρƒ Ρ‚ΠΎΠ²Π°Ρ€Π° (НапримСр скидка)., (*19)

// ПолС 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., (*20)

НаписаниС своСго Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, (*21)

ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π² Ρ‚Ρ€ΠΈ простых шага :, (*22)

  • По ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой ServiceProvider для Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ ΠΈ Π΄ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.
    'services' => [
        Cart\ServiceProviders\DatabaseServiceProviders::class,
        \Cart\ServiceProviders\RedisServiceProvider::class,
        ...
    ]
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс CartDriverContract ΠΈ для скидки DiscountDriverContract, (*23)

  • Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Ρ€Π°Π²Π΅Ρ€ Π² Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ :, (*24)

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

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с Laravel, (*25)

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² Laravel Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ :, (*26)

  • Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· composer, (*27)

  • Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ :, (*28)

./vendor/bin/cart migrate:laravel   

Π’Π΅ΠΌ самым ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ Π² исходныС ΠΏΠ°ΠΏΠΊΠΈ Laravel, (*29)

  • ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ driver ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌ (ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ установив всС настройки ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ , Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….)
app('cart')-> ...

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ использованиС, (*30)

  • Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚

composer require agoalofalife/cart, (*31)

  • Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ свои настройки Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
  'drivers' => [
        'database' => [
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => 'test',
            'username'  => 'test',
            'password'  => 'test',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => ''
        ]
  • Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для созданиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ./vendor/bin/cart cart:migrate, (*32)

  • ΠΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…., (*33)

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

The Versions