Laravel E-Commerce / Cart
English
Ру�?�?кий |— | Laravel |
---|---|
1.x | 7.x |
У�?тановка
$ composer require webdevrus/laravel-cart
- Миграции
$ php artisan vendor:publish --tag=cart-migrations
$ php artisan migrate
- Конфигураци�?
$ php artisan vendor:publish --tag=cart-config
- Указать трейт
HasCart
в моделиUser
.
<?php
namespace App\Models;
use WebDevRus\Laravel\Cart\Traits\HasCart;
class User extends Authenticatable
{
use HasCart;
...
}
И�?пользование
use WebDevRus\Laravel\Cart\Facades\Cart;
...
// Добавить товар в корзину
Cart::add([
'product_id' => 1,
'quantity' => 3,
'price' => 500,
]);
// Удалить товар из корзины
Cart::remove([
'product_id' => 10,
]);
// Вывод корзины
Cart::get();
// Очи�?тить корзину
Cart::clear();
�?а выходе Cart::get()
получаем �?одержимое такой �?труктуры
[
"items" => [
0 => [
"price" => 500
"quantity" => 3
"product_id" => 1
]
...
]
"total_count" => 1
"total_price" => 1500
"total_quantity" => 3
]
Е�?ли в
config/cart.php
ключmerge
в значенииtrue
, то по�?ле авторизации пользовател�?, корзина изsession
�?ольёт�?�? �? корзинойdatabase
.
Пример дополнени�? функционала
Дл�? примера �?оздадим helper-кла�?�? в про�?тран�?тве App\Helpers
и назовём его Cart
.
Он должен на�?ледовать о�?новной helper-кла�?�? ра�?ширени�? —
Helper
.
<?php
namespace App\Helpers;
use WebDevRus\Laravel\Cart\Helpers\Helper;
class Cart extends Helper
{
...
}
�?е забываем указать �?то в config/cart.php
'session' => [
...
'helper' => \App\Helpers\Cart::class,
],
'database' => [
...
'helper' => \App\Helpers\Cart::class,
],
Пример #1
Допу�?тим, нам нужно добавить новый тип вывода: вме�?то до�?тупных array
и object
— JSON
.
Перейдём в config/cart.php
и изменим ключ output
/**
* Указываем значение json
*/
'output' => 'json',
Создадим в App\Helpers\Cart
метод toJson()
public function toJson(array $array): string
{
return json_encode($array);
}
Теперь Cart::get()
будет отдавать �?троку в виде JSON.
Пример #2
В helper-кла�?�?е можно �?оздать два метода — before()
и after()
.
before()
— вызывает�?�? до формировани�? корзины.
after()
— вызывает�?�? по�?ле формировани�? и форматировани�? корзины.
Допу�?тим, нам необходимо добавить к �?лементам в корзине модель товара. �?ам подойдёт метод after()
, т.к. по�?ле before()
объект модели может преобразовать�?�?.
В таком �?лучае, код будет выгл�?деть примерно так:
/**
* @param array|object $cart
* @return void
*/
public function after(&$cart)
{
$items = data_get($cart, 'items');
$model = \App\Models\Product::whereIn('id', Arr::pluck($items, 'product_id'))
->get();
foreach ($items as $i => $item) {
$product = $model->firstWhere('id', data_get($item, 'product_id'));
data_set($cart, "items.{$i}.product", $product);
}
}
�?а выходе мы получим корзину типа array
или object
�? моделью товара дл�? каждой позиции.