定制 osamaelnagar/cart 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

osamaelnagar/cart

Composer 安装命令:

composer require osamaelnagar/cart

包简介

A standalone cart package for Laravel V11+.

README 文档

README

A flexible, polymorphic cart system for Laravel applications. This package allows you to add any model to a cart (Products, Services, etc.) and handles both authenticated and guest (cookie-based) shopping carts seamlessly.

Features

  • 🔄 Polymorphic: Add any Eloquent model to the cart.
  • 🍪 Guest Support: Automatically handles guest carts using UUID-based cookies.
  • 👤 Auth Integration: Links guest carts to users upon creation/authentication.
  • 🛠 Configurable: Customize table names, models, and cookie settings.
  • 🧠 Smart Scoping: Automatically filters carts by the current session/cookie.
  • Auto-Caching: Intelligent caching system that refreshes on updates for optimal performance.
  • 🔌 Ready-to-use Traits: Simple integration with User and Product models.

Installation

You can install the package via composer:

composer require osamaelnagar/cart

Setup

1. Publish Configuration

php artisan vendor:publish --tag=cart-config

2. Run Migrations

php artisan migrate

3. Prepare Your Models

The User Model

Add the Carter trait to your User model to enable the relationship:

use OsamaElnagar\Cart\Traits\Carter;

class User extends Authenticatable {
    use Carter;
}

The Cartable Model (e.g., Product)

Add the Cartable trait to any model you want to add to the cart:

use OsamaElnagar\Cart\Traits\Cartable;

class Product extends Model {
    use Cartable;
}

Basic Usage

Using the Facade

use OsamaElnagar\Cart\Facades\Cart;

// Add an item to the cart
Cart::add($product, $quantity = 1);

// Get all items in the current cart (automatically scoped by session/cookie)
$items = Cart::get();

// Update quantity
Cart::update($cartItemId, $newQuantity);

// Get total price (assumes cartable model has a 'price' attribute)
$total = Cart::total();

// Get the number of unique items types in cart
$count = Cart::itemsCount();

// Get the total quantity of all items combined
$qty = Cart::totalQuantity();

// Remove specific item
Cart::delete($cartItemId);

// Clear entire cart
Cart::clean();

Automatic Scoping

The package uses a CartScope that automatically filters results by the cart_id cookie. You don't need to worry about manually filtering by user or session ID for basic retrieval.

// This will only return items belonging to the current visitor's session
$myCartItems = \OsamaElnagar\Cart\Models\Cart::all();

Hooks & Events (Professional Control)

The package dispatches events throughout the cart lifecycle, allowing you to hook into any action:

  • OsamaElnagar\Cart\Events\ItemAdding: Before an item is added.
  • OsamaElnagar\Cart\Events\ItemAdded: After an item is added/incremented.
  • OsamaElnagar\Cart\Events\ItemUpdated: After an item quantity is updated.
  • OsamaElnagar\Cart\Events\ItemDeleted: After an item is removed.
  • OsamaElnagar\Cart\Events\CartCleared: After the cart is emptied.

Example: Listening for Cart Additions

In your EventServiceProvider:

protected $listen = [
    \OsamaElnagar\Cart\Events\ItemAdded::class => [
        \App\Listeners\SyncCartToMarketingTool::class,
    ],
];

Extensions & Macros

The Cart repository uses Laravel's Macroable trait, meaning you can add your own methods to the Cart facade at runtime.

// In a ServiceProvider boot method
Cart::macro('getWeight', function () {
    return $this->get()->sum(fn($item) => $item->cartable->weight * $item->quantity);
});

// Use it anywhere
$totalWeight = Cart::getWeight();

Configuration

Check config/cart.php for customization options:

  • log_enabled: Enable or disable package-wide logging (useful for debugging).
  • user_model: The model used for user authentication.
  • table_name: The database table name for cart items.
  • cache: Configure caching behavior (enable/disable, lifetime, prefix).
  • cookie: Settings for the guest cart cookie (name, lifetime).

License

The MIT License (MIT). Please see License File for more information.

osamaelnagar/cart 适用场景与选型建议

osamaelnagar/cart 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 3 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 12 月 26 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「cart」 「laravel」 「shopping cart」 「polymorphic」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 osamaelnagar/cart 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 osamaelnagar/cart 我们能提供哪些服务?
定制开发 / 二次开发

基于 osamaelnagar/cart 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 3
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 19
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-12-26