Cart
, (*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();