atwinta/data-transfer-object

Laravel 的数据传输对象

1.1.2 2024-04-23 07:04 UTC

This package is auto-updated.

Last update: 2024-09-23 08:53:20 UTC


README

安装

通过 Composer 安装

composer require atwinta/data-transfer-object

使用

创建 DTO

php artisan make:dto <name> - 在 app/DTO 文件夹中创建类

创建后,需要在 DTO 中指定字段。建议在构造函数中指定它们,因为构造函数中指定的字段可以使用 DTO::create() 方法填充,并使它们成为创建 DTO 的必需字段。

为了减少代码量,建议在构造函数中定义字段

class User extends \Atwinta\DTO\DTO
{
    public function __construct(
        public int $id
    ) {}
}

使用 DTO

创建 DTO 可以直接使用构造函数或使用 DTO::create() 方法。该方法接受类型为 [字段名 => 值] 的数组,并自动调用构造函数,以正确的顺序传递值。如果传递一个对象,它将被转换为数组,如下所示

  • 如果对象继承自 \Illuminate\Foundation\Http\FormRequest,则将调用 validated() 方法
  • 如果对象实现了接口 \Illuminate\Contracts\Support\Arrayable,则将调用 toArray() 方法
  • 所有其他对象将使用 cast (array) $object 转换为数组

由于 DTO 的基本类实现了接口 \Illuminate\Contracts\Support\Arrayable,因此可以填充其他 DTO 而不改变它们,直接传递给 DTO::create()

要大量填充已创建的 DTO,可以使用 DTO::fill() 方法。它接受与 DTO::create() 相同的参数,并以相同的方式处理它们。

默认情况下,DTO::create()DTO::fill() 在将对象写入填充的 DTO 字段之前会克隆对象。要禁用克隆,需要将这些方法的第二个参数传递为 false