dshafik / bag
全面的不变值对象实现
1.2.1
2024-09-14 04:11 UTC
Requires
- php: ^8.2|^8.3|^8.4
- brick/money: ^0.8.1 || ^0.9.0
- illuminate/collections: ^10|^11
- illuminate/database: ^10|^11
- illuminate/support: ^10|^11
- illuminate/validation: ^10|^11
- league/pipeline: ^1.0
- nette/php-generator: ^4.1
- prinsfrank/standards: ^3.8
- ramsey/uuid: ^4.7
Requires (Dev)
- captainhook/captainhook-phar: ^5.23
- captainhook/hook-installer: ^1.0
- larastan/larastan: ^2.0
- laravel/pint: ^1.15
- laravel/prompts: ^0.1.25
- orchestra/pest-plugin-testbench: ^2.0|^3.0
- pestphp/pest: ^2.0|^3.0
- pestphp/pest-plugin-faker: ^2.0|^3.0
- pestphp/pest-plugin-type-coverage: ^2.0|^3.0
- ramsey/conventional-commits: ^1.5.1
- roave/security-advisories: dev-latest
- symfony/var-dumper: *
This package is auto-updated.
Last update: 2024-09-24 00:50:54 UTC
README
Bag
Bag 是受 spatie/laravel-data 启发,由 Davey Shafik 创建的 PHP 8.3+ 不变值对象的实现。
简介
Bag 帮助你创建不变值对象。这是在应用程序中封装数据的绝佳方式。
Bag 通过内置验证和数据转换优先考虑不变性和类型安全。
何时使用值对象
值对象应替换常规数组,以便强制执行类型安全和不变性。
功能
- 不变 & 强类型
- 值转换 — 输入和输出
- 集合支持
- 可组合 — 嵌套 Bag 值对象和集合
- 内置验证
注意
Bag 无框架限制,但与 Laravel 结合使用效果极佳。Bag 使用标准的 Laravel Collections 和 Validation。此外,它将自动将带有验证的 Bag\Bag
值对象注入到你的控制器中。
要求
Bag 需要 PHP 8.3+,并支持 Laravel 11.x。
安装
您可以通过 composer 安装此包
composer require dshafik/bag
用法
创建值对象
要创建基本的值对象,扩展 Bag\Bag
类并在构造函数中定义您的属性
use Bag\Bag; readonly class MyValue extends Bag { public function __construct( public string $name, public int $age, ) { } }
实例化值对象
要创建您值对象的新实例,调用 ::from()
方法
$value = MyValue::from([ 'name' => 'Davey Shafik', 'age' => 40, ]);
文档
完整文档可在此处找到 这里。