finller / 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)。有关更多信息,请参阅 许可证文件