dshafik/bag

全面的不变值对象实现

1.2.1 2024-09-14 04:11 UTC

README

Bag

Coverage Quality Gate Status

Bag

Bag 是受 spatie/laravel-data 启发,由 Davey Shafik 创建的 PHP 8.3+ 不变值对象的实现。

简介

Bag 帮助你创建不变值对象。这是在应用程序中封装数据的绝佳方式。

Bag 通过内置验证和数据转换优先考虑不变性和类型安全。

何时使用值对象

值对象应替换常规数组,以便强制执行类型安全和不变性。

功能

  • 不变 & 强类型
  • 值转换 — 输入和输出
  • 集合支持
  • 可组合 — 嵌套 Bag 值对象和集合
  • 内置验证

注意

Bag 无框架限制,但与 Laravel 结合使用效果极佳。Bag 使用标准的 Laravel CollectionsValidation。此外,它将自动将带有验证的 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,
]);

文档

完整文档可在此处找到 这里