优雅 / laravel-money
在您的Laravel应用程序中使用Brick/Money
v2.0.1
2024-08-28 13:37 UTC
Requires
- php: ^8.1
- brick/money: ^0.9.0
- illuminate/contracts: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.13.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.8|^8.1
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.8|^9.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^10.0
- spatie/laravel-ray: ^1.26
README
在您的Laravel应用程序中轻松使用Brick/Money。
特性
- MoneyCast: 将模型属性强制转换为
Brick\Money\Money
- MoneyParse: 解析字符串和其他类型到
Brick\Money\Money
- ValidMoney: Money验证规则
升级到V2
重大更改
命名空间已更新:从 Finller\Money
更新到 Elegantly\Money
。您可以简单地执行搜索+替换。
安装
您可以通过Composer安装此包
composer require elegantly/laravel-money
您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="money-config"
这是发布配置文件的内容
return [ 'default_currency' => 'USD', ];
使用方法
使用列作为货币的强制转换(推荐)
如果您将货币存储在表列中,与金额值一起,您可以指定列名如下
use Elegantly\MoneyCast; /** * @property ?Money $price * @property ?string $currency **/ class Invoice extends Model { protected $casts = [ 'price' => MoneyCast::class . ':currency' ]; }
使用定义的货币进行强制转换
您可以使用货币代码而不是列名将您的金额转换为特定货币。
use Elegantly\MoneyCast; /** * @property ?Money $price * @property ?Money $cost **/ class Invoice extends Model { protected $casts = [ 'cost' => MoneyCast::class . ':EUR', 'price' => MoneyCast::class . ':USD' ]; }
将值解析为货币实例
您可以使用 MoneyParser
将任何字符串/int/float解析为货币实例。
以下是一些预期行为的示例
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€
验证规则
在Livewire中使用 ValidMoney
namespace App\Livewire; use Elegantly\Money\Rules\ValidMoney; use Illuminate\Foundation\Http\FormRequest; class CustomComponent extends Component { #[Validate([ new ValidMoney(nullable: false, min: 0, max: 100) ])] public ?int $price = null; }
在表单请求中使用 ValidMoney
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 ) ], ]; } }
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近更改的更多信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全漏洞
请审查 我们的安全策略 了解如何报告安全漏洞。
鸣谢
许可
MIT许可(MIT)。请参阅 许可文件 了解更多信息。