elegantly/laravel-money
Composer 安装命令:
composer require elegantly/laravel-money
包简介
Use Brick/Money in your Laravel app
README 文档
README
Table of Contents
Introduction
This package provides seamless, expressive integration of Brick/Money with Laravel. It enables safe, precise handling of monetary values in your application—using value objects, smart casting, robust parsing, and powerful validation tools.
Features
- MoneyCast – Automatically cast Eloquent attributes to
Brick\Money\Money. - MoneyParser – Convert strings, integers, or floats into
Moneyinstances safely. - ValidMoney Rule – Validate monetary input with min/max boundaries, type safety, and nullability.
Installation
Install via Composer:
composer require elegantly/laravel-money
Configuration
Publish the configuration file if you need to customize defaults:
php artisan vendor:publish --tag="money-config"
Default config (config/money.php):
return [ 'default_currency' => 'USD', ];
Storing Money in the Database
For maximum precision, store money using:
- a
bigIntegercolumn for the amount (in the smallest currency unit) - a
stringcolumn for the ISO currency code
This avoids floating-point precision issues and ensures accurate calculations.
Example migration:
Schema::create('invoices', function (Blueprint $table) { $table->id(); $table->bigInteger('amount'); // e.g., 1000 = $10.00 $table->string('currency', 3); // ISO 4217 code $table->timestamps(); });
Usage
Casting with a Currency Column (Recommended)
If your model stores both amount and currency, reference the currency column in the cast:
use Elegantly\Money\MoneyCast; use Brick\Money\Money; /** * @property Money $amount * @property string $currency */ class Invoice extends Model { protected function casts(): array { return [ 'amount' => MoneyCast::of('currency'), ]; } }
Casting with a Fixed Currency
If the currency is known and constant, define it directly:
use Elegantly\Money\MoneyCast; use Brick\Money\Money; /** * @property Money $amount * @property Money $cost */ class Invoice extends Model { protected function casts(): array { return [ 'cost' => MoneyCast::of('EUR'), 'price' => MoneyCast::of('USD'), ]; } }
Parsing Values
MoneyParser converts common numeric and string formats into Money instances:
use Elegantly\Money\MoneyParser; MoneyParser::parse(null, 'EUR'); // null MoneyParser::parse(110, 'EUR'); // 110.00 € MoneyParser::parse(100.10, 'EUR'); // 100.10 € MoneyParser::parse('', 'EUR'); // null MoneyParser::parse('1', 'EUR'); // 1.00 € MoneyParser::parse('100.10', 'EUR'); // 100.10 €
The parser handles nullability, empty strings, integers, floats, and decimal string formats gracefully.
Validation Rule
Using ValidMoney in Livewire
namespace App\Livewire; use Elegantly\Money\Rules\ValidMoney; use Livewire\Component; class CustomComponent extends Component { #[Validate([ new ValidMoney(nullable: false, min: 0, max: 100), ])] public ?int $price = null; }
Using ValidMoney in Form Requests
namespace App\Http\Requests; use Elegantly\Money\Rules\ValidMoney; use Illuminate\Foundation\Http\FormRequest; class CustomFormRequest extends FormRequest { public function rules() { return [ 'price' => [ new ValidMoney( nullable: false, min: 0, max: 100 ), ], ]; } }
Testing
Run the test suite:
composer test
Changelog
See the CHANGELOG for a full history of updates.
Contributing
Contributions are welcome! Review the CONTRIBUTING file for details.
Security
If you discover a security vulnerability, please refer to the security policy.
Credits
License
This package is open-source software released under the MIT License. See LICENSE.md for details.
elegantly/laravel-money 适用场景与选型建议
elegantly/laravel-money 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 72k 次下载、GitHub Stars 达 20, 最近一次更新时间为 2024 年 08 月 27 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「money」 「laravel」 「laravel-money」 「Elegantly」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 elegantly/laravel-money 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 elegantly/laravel-money 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 elegantly/laravel-money 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Beyonic PHP Library
Use Brick/Money in your Laravel app
The Payum Yandex Money gateway
Alfabank REST API integration
Handles currency for Laravel 5.8
Yii 2 package for sprintpay gateway
统计信息
- 总下载量: 72k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 20
- 点击次数: 30
- 依赖项目数: 4
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2024-08-27