Введение
Это — современный и независимый от фреймворков пакет корзины покупок; характеризуется поддержкой множества экземпляров, атрибутов товаров и условий.
Пакет требует PHP 5.4+ и поставляется в комплекте с фасадом и сервис-провайдером для Laravel 4 для простой интеграции с фреймворком, соответствует стандарту FIG PSR-4 для обеспечения высокого уровня взаимодействия с общим кодом PHP, и полностью покрыт юнит-тестами.
Ниже об установке и о том, как интегрировать его в Laravel 4.
Простой пример
Добавление одного товара в корзину
Cart::add([
'id' => 'tshirt',
'name' => 'T-Shirt',
'quantity' => 1,
'price' => 12.50,
]);
Добавление нескольких товаров в корзину
Cart::add([
[
'id' => 'tshirt',
'name' => 'T-Shirt',
'quantity' => 1,
'price' => 12.50,
],
[
'id' => 'sweatshirt',
'name' => 'Sweatshirt',
'quantity' => 1,
'price' => 98.32,
],
]);
Получение всех товаров корзины
$items = Cart::items();
Установка
Лучший и самый простой способ установить пакет Cart — с помощью Composer.
Подготовка
Откройте ваш файл composer.json и добавьте следующее в массив require:
js"cartalyst/cart": "1.0.*"
Добавьте следующие строки после массива require в вашем файле composer.json:
js"repositories": [ { "type": "composer", "url": "http://packages.cartalyst.com" } ]
Примечание: Убедитесь в том, что после внесения изменений в файл composer.json, он остался валидным, запустив composer validate.
Установка зависимостей
Запустите Composer для установки или обновления новых требований.
shphp composer install
shphp composer update
Теперь вы можете использовать PHPrequire 'vendor/autoload.php';
, чтобы автоматически загружать пакет.
Интеграция
Laravel 4
Пакет Cart поддерживает работу с Laravel 4 и поставляется вместе с сервис-провайдером и фасадом для простой интеграции.
После установки пакета откройте ваш файл конфигурации Laravel, находящийся в app/config/app.php, и добавьте следующие строки.
В массив $providers добавьте следующий сервис-провайдер для этого пакета.
'Cartalyst\Cart\Laravel\CartServiceProvider',
В массив $aliases добавьте следующий фасад для этого пакета.
'Cart' => 'Cartalyst\Cart\Laravel\Facades\Cart',
Конфигурация
После установки вы можете опубликовать файл конфигурации пакета в вашем приложении, запустив следующую команду в своём терминале:
shphp artisan config:publish cartalyst/cart
Это опубликует ваш файл конфигурации в app/config/packages/cartalyst/cart/config.php, где вы можете изменить конфигурацию пакета.
Интеграция с Laravel
Интегрировать пакет с фреймворком извне невероятно легко, просто следуйте этому примеру:
// Включение файла автозагрузки composer
require_once 'vendor/autoload.php';
// Импорт необходимых классов
use Cartalyst\Cart\Cart;
use Cartalyst\Cart\Storage\NativeSession;
use Illuminate\Events\Dispatcher;
use Illuminate\Filesystem\Filesystem;
use Illuminate\Session\FileSessionHandler;
use Illuminate\Session\Store;
// Требование конфигурационного файла корзины
$config = require_once 'vendor/cartalyst/cart/src/config/config.php';
// Создание экземпляра хранилища новой Сессии
$fileSessionHandler = new FileSessionHandler(new Filesystem(), __DIR__.'/storage/sessions');
$store = new Store('your_app_session_name', $fileSessionHandler);
$session = new NativeSession($store, $config['session_key'], $config['instance']);
// Создание экземпляра Корзины и установка необходимой конфигурации
$cart = new Cart('cart', $session, new Dispatcher);
$cart->setRequiredIndexes($config['requiredIndexes']);
Интеграция сделана, и теперь вы можете использовать все доступные методы, вот пример:
// Получение всех товаров корзины
$items = $cart->items();
Примечание 1: Убедитесь, что папка storage/sessions существует, и у web-сервера есть права на запись в неё. Она может быть заменена на другую папку, если потребуется.
Примечание 2: Для сборки мусора вызовите метод PHPgc()
в PHPFileSessionHandler
как PHP$fileSessionHandler->gc($lifetime);
. Вы также можете настроить функцию, которая будет вызывать этот метод случайным образом вместо того, чтобы вызывать его при каждом запросе.
Использование
В этом разделе мы покажем, как вы можете управлять вашей корзиной для покупок.
Добавление товара
Возможность добавления товаров в корзину имеет решающее значение, и мы сделали эту возможность невероятно простой.
Вы можете передавать простые или многомерные массивы, и чтобы помочь вам разобраться, ниже мы перечислили все ключи по умолчанию, которые вы можете передавать при добавлении или обновлении элементов корзины.
Ключ | Обязательный | Тип | Описание |
---|---|---|---|
id | да | mixed | Уникальный идентификатор товара, может быть числовым, артикул (SKU), и т.д. |
name | да | string | Название товара. |
price | да | float | Цена товара. |
quantity | да | int | Количество, должно быть целым и не может быть отрицательным. |
attributes | нет | array | Атрибуты товара, такие как размер, цвет, материал, и т.д. |
weight | нет | float | Вес товара. |
Примечание: Вы можете передавать дополнительные пары ключ/значение в массив при добавлении или обновлении товара, это можно увидеть в последующих примерах.
Cart::add()
Параметр | Обязательный | Тип | Описание |
---|---|---|---|
$item | да | array | Простой или многомерный массив, который соответствует списку ключей, указанному выше. |
Cart::add([
'id' => 'tshirt',
'name' => 'T-Shirt',
'quantity' => 1,
'price' => 12.50,
]);
Добавление одного товара с дополнительным ключом
Cart::add([
'id' => 'tshirt',
'name' => 'T-Shirt',
'quantity' => 1,
'price' => 12.50,
'sku' => 'tshirt-custom',
]);
Добавление одного товара с атрибутами и дополнительным ключом
Cart::add([
'id' => 'tshirt',
'name' => 'T-Shirt',
'quantity' => 1,
'price' => 12.50,
'sku' => 'tshirt-red-large',
'attributes' => [
'color' => [
'label' => 'Red',
'value' => 'red',
],
'size' => [
'label' => 'Large',
'value' => 'l',
],
],
]);
Cart::add([
[
'id' => 'tshirt',
'name' => 'T-Shirt',
'quantity' => 1,
'price' => 12.50,
'sku' => 'tshirt-red-large',
'attributes' => [
'color' => [
'label' => 'Red',
'value' => 'red',
],
'size' => [
'label' => 'Large',
'value' => 'l',
],
],
],
[
'id' => 'sweatshirt',
'name' => 'Sweatshirt',
'quantity' => 1,
'price' => 98.32,
],
]);
Обновление товара
Обновлять товары так же просто, как и добавлять их.
Cart::update()
Параметр | Обязательный | Тип | Описание |
---|---|---|---|
$rowId | да | string | Строковый id элемента. |
$data | да | mixed | Это может быть как массив так и целое число, если число, то оно будет обновлять количество этого товара. |
Примечание: Если PHP$data
массив, то вам не требуется передавать все ключи, только те, которые вы хотите обновить, такие как name, price, quantity, attributes и т.д.
Cart::update('c14c437bc9ae7d35a7c18ee151c6acc0', 2);
Cart::update('c14c437bc9ae7d35a7c18ee151c6acc0', [
'quantity' => 1,
'price' => 12.50,
]);
Cart::update([
'c14c437bc9ae7d35a7c18ee151c6acc0' => [
'id' => 'tshirt',
'name' => 'T-Shirt',
'quantity' => 1,
'price' => 12.50,
],
'63e2d7033fe95b9134a5737503d10ba5' => [
'id' => 'sweatshirt',
'name' => 'Sweatshirt',
'quantity' => 2,
'price' => 98.32,
],
]);
Удаление товара
Удалять товары из корзины просто, вы можете удалить один товар за раз или несколько, предоставляя массив, содержащий строковые id, которые вы хотите удалить.
Cart::remove()
Параметр | Обязательный | Тип | Описание |
---|---|---|---|
$items | да | mixed | Это может быть как строка, так и массив, содержащий строковые id товаров. |
Cart::remove('c14c437bc9ae7d35a7c18ee151c6acc0');
Cart::remove([
'c14c437bc9ae7d35a7c18ee151c6acc0',
'63e2d7033fe95b9134a5737503d10ba5',
]);
Товары
Хотите показать товары вашей корзины покупок? У нас всё схвачено!
Вы можете перечислить все товары или получить конкретные товары, используя их id.
$items = Cart::items();
foreach ($items as $item)
{
echo $item->price();
}
Проверка существования товара
Этот метод наиболее полезен при удалении товаров корзины, вы можете проверить, есть ли товар в корзине, перед тем как удалить его.
if (Cart::exists('c14c437bc9ae7d35a7c18ee151c6acc0'))
{
Cart::remove('c14c437bc9ae7d35a7c18ee151c6acc0');
}
$item = Cart::item('c14c437bc9ae7d35a7c18ee151c6acc0');
$item->price();
$item->quantity();
$item->subtotal();
$item->weight();
$item->attributes();
Другие методы
В этом разделе мы рассмотрим все остальные методы, которые не уместились в предыдущих разделах.
Cart::total()
echo Cart::total();
Cart::subtotal()
echo Cart::subtotal();
Cart::quantity()
Возвращает общее количество товаров в корзине.
echo Cart::quantity();
Cart::weight()
echo Cart::weight();
Cart::itemsSubtotal()
Получение подитога товаров корзины.
echo Cart::itemsSubtotal();
Cart::clear()
Cart::clear();
Cart::getIdentity()
Возвращает идентификатор корзины.
Cart::getIdentity();
Cart::setIdentity()
Cart::setIdentity('my-new-cart-name');
Cart::sync()
Этот метод очень полезен, когда вы хотите синхронизировать корзину покупок, которая хранится в БД например.
В этом небольшом примере мы используем статический массив.
$items = [
[
'id' => 'tshirt',
'name' => 'T-Shirt',
'quantity' => 1,
'price' => 12.50,
],
[
'id' => 'sweatshirt',
'name' => 'Sweatshirt',
'quantity' => 1,
'price' => 98.32,
],
];
$collection = new Collection($items);
Cart::sync($collection);
Метаданные
Управлять метаданными внутри корзины, такими как информация об оплате и доставке, очень просто.
Cart::setMetadata()
Задать метаданные очень легко, просто предоставьте массив с парой ключ/значение и всё.
Параметр | Обязательный | Тип | Описание |
---|---|---|---|
$data | да | array | Массив с данными, которые вы хотите прикрепить. |
$data = [
'shipping_information' => [
'full_name' => 'John Doe',
'address' => 'Example Street',
],
];
Cart::setMetadata($data);
Cart::getMetadata()
Получить метаданные, которые вы задали, просто.
Параметр | Обязательный | Тип | Описание |
---|---|---|---|
$key | нет | mixed | Ключ метаданных для получения. |
Для получения всех доступных метаданных
$metadata = Cart::getMetadata();
Для получения метаданных по ключам
$metadata = Cart::getMetadata('shipping_information');
$metadata = Cart::getMetadata('shipping_information.full_name');
Cart::removeMetadata()
Параметр | Обязательный | Тип | Описание |
---|---|---|---|
$key | нет | mixed | Ключ метаданных для удаления. |
Cart::removeMetadata();
Для удаления метаданных по ключам
Cart::removeMetadata('shipping_information.full_name');
Cart::removeMetadata('shipping_information');
Поиск
Если вам когда-нибудь понадобится поиск в корзине покупок — у нас, конечно, и здесь всё схвачено.
Вы можете использовать одно или несколько свойств для поиска товаров в корзине.
Cart::find()
Параметр | Обязательный | Тип | Описание |
---|---|---|---|
$data | да | array | Массив свойств, который вы хотите найти. |
Пример 1
Поиск товара, id которого foobar
Cart::find([
'id' => 'foobar',
]);
Пример 2
Поиск товара, у которого название Foo Bar и цена 5
Cart::find([
'name' => 'Foo Bar',
'price' => 5,
]);
Пример 3
Поиск товаров со следующими атрибутами
Cart::find([
'attributes' => [
'size' => [
'price' => 5,
],
],
]);
Атрибуты
Каждый товар может иметь разные атрибуты, такие как размер, цвет, и вы даже можете добавить цену каждому атрибуту, что будет сказываться на конечной стоимости товара.
Ключ | Обязательный | Описание |
---|---|---|
label | да | Название, которое отображается пользователю. |
value | да | Значение атрибута. |
price | нет | Цена атрибута. |
weight | нет | Вес атрибута. |
Примечание: Вы можете передавать дополнительные пары ключ/значение в массиве, смотрите примеры ниже.
Cart::add([
'id' => 'tshirt',
'name' => 'T-Shirt',
'quantity' => 1,
'price' => 12.50,
'attributes' => [
'size' => [
'label' => 'Large',
'value' => 'l',
'price' => 5,
],
'color' => [
'label' => 'Red',
'value' => 'red',
],
],
]);
Коллекции
Коллекции являются лишь оболочкой для массива объектов, но предлагают кучу своих полезных методов, чтобы помочь вам вытаскивать товары из массива.
Ниже мы используем несколько из множества полезных методов, доступных в классе Collection Laravel.
first()
Метод first() может быть использован для получения первого элемента коллекции.
Это будет первый элемент, содержащийся во внутреннем массиве коллекции.
$item = Cart::items()->first();
last()
Метод last() обратный методу first() и возвращает последний элемент, содержащийся во внутреннем массиве коллекции.
$item = Cart::items()->last();
isEmpty()
Метод isEmpty() может быть использован для проверки того, содержит ли коллекция элементы или нет. Он не принимает никаких значений и возвращает логическое значение.
if ( ! Cart::items()->isEmpty())
{
echo 'We have items on our cart :)';
}
else
{
echo 'Cart is empty :(';
}
count()
Метод count() подсчитывает количество элементов в коллекции.
$total = Cart::items()->count();
Экземпляры
Cart поддерживает создание множества экземпляров корзин, поэтому у вас может быть столько экземпляров корзин на одной странице, сколько захотите, без всяких конфликтов.
У вас есть два способа добиться этого. Первый — создание сервис-провайдера, предназначенного для регистрации в вашем списке желаний (PHPWishlist
) всех других ваших экземпляров корзин. Второй способ проще, он заключается в привязке новых экземпляров непосредственно к IoC.
Привязка к IoC
use Cartalyst\Cart\Cart;
use Cartalyst\Cart\Storage\Sessions\IlluminateSession;
$app = app();
$app['wishlist'] = $app->share(function($app)
{
$config = $app['config']->get('cartalyst/cart::config');
$storage = new IlluminateSession($app['session.store'], $config['session_key'], 'wishlist');
return new Cart('wishlist', $storage, $app['events']);
});
Создание вашего сервис-провайдера
app/services/WishlistServiceProvider.php
use Cartalyst\Cart\Cart;
use Cartalyst\Cart\Storage\Sessions\IlluminateSession;
use Illuminate\Support\ServiceProvider;
class WishlistServiceProvider extends ServiceProvider {
/**
* Регистрация сервис-провайдера.
*
* @return void
*/
public function register()
{
$this->registerSession();
$this->registerCart();
}
/**
* Регистрация драйвера сессий, используемого Wishlist.
*
* @return void
*/
protected function registerSession()
{
$this->app['wishlist.storage'] = $this->app->share(function($app)
{
$config = $app['config']->get('cartalyst/cart::config');
return new IlluminateSession($app['session.store'], $config['session_key'], 'wishlist');
});
}
/**
* Регистрация Wishlist.
*
* @return void
*/
protected function registerCart()
{
$this->app['wishlist'] = $this->app->share(function($app)
{
return new Cart('wishlist', $app['wishlist.storage'], $app['events']);
});
}
}
Создание вашего фасада
use Illuminate\Support\Facades\Facade;
class Wishlist extends Facade {
protected static function getFacadeAccessor()
{
return 'wishlist';
}
}
Регистрация вашего сервис-провайдера и фасада
Откройте ваш конфигурационный файл Laravel app/config/app.php и добавьте следующие строки.
В массив $providers добавьте следующий сервис-провайдер для этого пакета.
'Path\To\Your\WishlistServiceProvider',
В массив $aliases добавьте следующий фасад для этого пакета.
'Wishlist' => 'Path\To\Your\Wishlist',
Использование
Использование идентично корзине.
Wishlist::add([
'id' => 'tshirt',
'name' => 'T-Shirt',
'quantity' => 1,
'price' => 12.50,
]);
Условия
Пакет Cart использует пакет Cartalyst Conditions для управления условиями товара и корзины.
По умолчанию в Cart заданы три типа условий: discount (скидка), tax (налог) и other (другие условия).
Условия корзины
Вы можете передавать в корзину массив, содержащий одно или несколько условий.
$condition = new Condition([
'name' => 'VAT (12.5%)',
'type' => 'tax',
'target' => 'subtotal',
]);
$condition->setActions([
[
'value' => '12.5%',
],
]);
Cart::condition($condition);
$conditionTax = new Condition([
'name' => 'VAT (12.5%)',
'type' => 'tax',
'target' => 'subtotal',
]);
$conditionTax->setActions([
[
'value' => '12.5%',
],
]);
$conditionDiscount = new Condition([
'name' => 'Discount (2.5%)',
'type' => 'discount',
'target' => 'subtotal',
]);
$conditionDiscount->setActions([
[
'value' => '-2.5%',
],
]);
Cart::condition([$conditionTax, $conditionDiscount]);
Условия товара
Вы можете добавить одно или больше (массив) условий для товара, которые будут назначены автоматически при добавлении или обновлении товаров в корзине.
$condition = new Condition([
'name' => 'VAT (12.5%)',
'type' => 'tax',
'target' => 'subtotal',
]);
Cart::add([
'id' => 'tshirt',
'name' => 'T-Shirt',
'quantity' => 1,
'price' => 12.50,
'conditions' => $condition,
]);
Удаление условий
Иногда вам понадобиться удалять условия, в этом разделе мы рассмотрим, как удалять конкретные условия или все условия сразу.
Cart::removeConditionByName()
Удаление условия по его названию.
Параметр | Обязательный | Тип | По умолчанию | Описание |
---|---|---|---|---|
$name | да | string | null | Название условия. |
$includeItems | нет | boolean | true | Флаг, показывающий надо ли удалять условие для товара или нет. |
Cart::removeConditionByName('Tax 10%');
Cart::removeConditionByType()
Удаление условия по его имени.
Параметр | Обязательный | Тип | По умолчанию | Описание |
---|---|---|---|---|
$type | да | string | null | Тип условия. |
$includeItems | нет | boolean | true | Флаг, показывающий надо ли удалять условие для товара или нет. |
Cart::removeConditionByType('tax');
Cart::removeConditions()
Удаление всех условий с указанным идентификатором.
Параметр | Обязательный | Тип | По умолчанию | Описание |
---|---|---|---|---|
$id | нет | mixed | null | Идентификатор условия. |
$includeItems | нет | boolean | true | Флаг, показывающий надо ли удалять условие для товара или нет. |
$target | нет | string | type | Целевой объект, к которому было применено условие. |
Cart::removeConditions('tax');
Удаление всех примененных условий
Cart::removeConditions();
Типы условий
Типы условий определяются свойством условий «тип».
Cart по умолчанию обрабатывает типы условий discount, tax и other.
Примечание: Если вы хотите определить свои типы условий, убедитесь, что вы задали порядок использования условий PHPCart::setConditionsOrder($types)
, передав ему массив типов, которые должны обрабатываться корзиной, иначе будут применены только типы условий по умолчанию.
Налог
Условию налога должен быть задан тип tax
$condition = new Condition([
'name' => 'VAT (12.5%)',
'type' => 'tax',
'target' => 'subtotal',
]);
$condition->setActions([
[
'value' => '12.5%',
],
]);
Скидка
Условию скидки должен быть задан тип discount
$condition = new Condition([
'name' => 'Discount (5%)',
'type' => 'discount',
'target' => 'subtotal',
]);
$condition->setActions([
[
'value' => '-5%',
],
]);
Это условие будет применять 5% скидку.
Другие
Другим условиям должен быть задан тип other.
Следующее условие будет добавлять 5 к подитогу после применения скидок (если они есть), предполагая, что порядок условий задан по умолчанию.
$condition = new Condition([
'name' => 'Other (5%)',
'type' => 'other',
'target' => 'subtotal',
]);
$condition->setActions([
[
'value' => '5',
],
]);
Включённые условия
Включённые условия не добавляются к итогу, но позволяют вам пересчитывать налоги, которые уже включены в вашу цену.
Это условие будет пересчитано и будет влиять на итоги методов условий, но не будет добавлено к итогу корзины.
$condition = new Condition([
'name' => 'Tax (5%)',
'type' => 'tax',
'target' => 'subtotal',
]);
$condition->setActions([
[
'value' => '5%',
'inclusive' => true,
],
]);
Порядок условий
Порядок по умолчанию
- discount
- other
- tax
Получение порядка условий корзины
$order = Cart::getConditionsOrder();
Задание порядка условий корзины
Cart::setConditionsOrder([
'discount',
'other',
'tax',
'shipping',
]);
Задание порядка условий товаров
Cart::setItemsConditionsOrder([
'discount',
'other',
'tax',
'shipping',
]);
Примечание: Убедитесь, что вы задали порядок условий для товара перед добавлением или обновлением.
Объекты условий
Вы можете применить условия товара, как к цене товара, так и к подитогу.
- цена
- подитог
Примечание 1: Условия товара всегда применяются до условий корзины.
Примечание 2: Условия товара, касающиеся цены, всегда применяются до условий, касающихся подитога.
Методы условий
Cart::condition(Cartalyst\Conditions\Condition $condition);
Получение всех применённых условий.
Cart::conditions($type|null, bool $includeItems);
Задание порядка применения условий.
Cart::setConditionsOrder([
'discount',
'other',
'tax',
]);
Задание порядка применения условий к товарам.
Cart::setItemsConditionsOrder([
'discount',
'tax',
'shipping',
]);
Получение всех итогов условий, сгруппированных по типу.
Cart::conditionsTotal($type); // Возвращает массив результатов переданного типа, включая условия товаров
Cart::conditionsTotal($type, false); // Возвращает массив результатов переданного типа, исключая условия товаров
Cart::conditionsTotal(); // Возвращает массив результатов всех применённых условий, включая условия товаров
Cart::conditionsTotal(null, false); // Возвращает массив результатов всех применённых условий, исключая условия товаров
Получение суммы всех или конкретных типов условий.
Cart::conditionsTotalSum($type); // Возвращает сумму условий переданного типа
Cart::conditionsTotalSum(); // Возвращает сумму всех условий
Получение всех условий, применённых только к товарам.
Cart::itemsConditions();
Получение сумм всех или конкретных типов условий товаров, сгруппированных по типам.
Cart::itemsConditionsTotal($type); // Возвращает массив результатов переданного типа
Cart::itemsConditionsTotal(); // Возвращает массив результатов всех применённых условий
Получение суммы всех или конкретных типов условий товаров.
Cart::itemsConditionsTotalSum($type); // Возвращает сумму переданного типа
Cart::itemsConditionsTotalSum(); // Возвращает сумму всех условий
События
В этом разделе мы перечислим все события, создаваемые пакетом cart, за которыми вы можете следить.
Событие | Параметры | Описание |
---|---|---|
cartalyst.cart.added | $item, $cart | Событие возникает, когда товар добавлен в корзину. |
cartalyst.cart.removed | $item, $cart | Событие возникает, когда товар удалён из корзины. |
cartalyst.cart.update | $item, $cart | Событие возникает, когда товар обновлён. |
cartalyst.cart.cleared | $cart | Событие возникает, когда корзина очищена. |
Примеры
Когда товар добавлен в корзину покупок.
Event::listen('cartalyst.cart.added', function($item, $cart)
{
// Примените здесь вашу бизнес-логику
});
Когда товар удалён из корзины покупок.
Event::listen('cartalyst.cart.removed', function($item, $cart)
{
// Примените здесь вашу бизнес-логику
});
Когда товар обновлён в корзине покупок.
Event::listen('cartalyst.cart.updated', function($item, $cart)
{
// Примените здесь вашу бизнес-логику
});
Когда корзина покупок очищена.
Event::listen('cartalyst.cart.cleared', function($cart)
{
// Примените здесь вашу бизнес-логику
});
Исключения
В этом разделе мы приведём список всех исключений, которые создаются пакетом cart.
Исключения создаются в пространстве имен Cartalyst\Cart\Exceptions.
Исключение | Описание |
---|---|
CartMissingRequiredIndexException | Это исключение возникает, когда требуемый ключ не предоставлен. |
CartInvalidQuantityException | Это исключение возникает, когда предоставленное количество некорректно. |
CartInvalidPriceException | Это исключение возникает, когда предоставленная цена некорректна. |
CartInvalidAttributesException | Это исключение возникает, когда предоставленные атрибуты некорректны или неправильны. |
CartItemNotFoundException | Это исключение возникает, когда вы запрашиваете несуществующий товар. |
Примеры
Перехват исключения при добавлении товара в корзину без необходимого ключа.
try
{
// Мы не передаём цену
Cart::add([
'id' => 'tshirt',
'name' => 'T-Shirt',
'quantity' => 1,
]);
}
catch (Cartalyst\Cart\Exceptions\CartMissingRequiredIndexException $e)
{
// Получение недостающего ключа
$missingIndex = $e->getMessage();
// Примените здесь вашу бизнес-логику
}
Перехват исключения при добавлении товара с некорректным значением количества.
try
{
Cart::add([
'id' => 'tshirt',
'name' => 'T-Shirt',
'quantity' => -1,
'price' => 12.50,
]);
}
catch (Cartalyst\Cart\Exceptions\CartInvalidQuantityException $e)
{
// Примените здесь вашу бизнес-логику
}
Перехват исключения при добавлении товара с некорректным значением цены.
try
{
Cart::add([
'id' => 'tshirt',
'name' => 'T-Shirt',
'quantity' => 1,
'price' => 'abc',
]);
}
catch (Cartalyst\Cart\Exceptions\CartInvalidPriceException $e)
{
// Примените здесь вашу бизнес-логику
}
Перехват исключения при добавлении товара с некорректными атрибутами.
try
{
Cart::add([
'id' => 'tshirt',
'name' => 'T-Shirt',
'quantity' => 1,
'price' => 12.50,
'attributes' => 'abc',
]);
}
catch (Cartalyst\Cart\Exceptions\CartInvalidAttributesException $e)
{
// Примените здесь вашу бизнес-логику
}
Перехват исключения при попытке обновления несуществующего товара.
try
{
Cart::update('abc', [
'price' => 20.00,
]);
}
catch (Cartalyst\Cart\Exceptions\CartItemNotFoundException $e)
{
// Примените здесь вашу бизнес-логику
}
Комментарии (3)
Спасибо, очень полезно!
Но есть некоторые вопросы.
Обновление количества товара
Cart::update('c14c437bc9ae7d35a7c18ee151c6acc0', 2);
Первый параметр — это что такое? Откуда берется этот идентификатор?
class ItemCollection{
public function setPrice($price){
$this->put('price', (float) $price);
Только посмотрите на код этого пакета.
Не вздумайте использовать этот пакет, абсолютный не профессионализм разработчиков.
крайне не советую использовать любые пакеты «рукожопов» cartalyst