atwinta / data-transfer-object
Laravel 的数据传输对象
1.1.2
2024-04-23 07:04 UTC
Requires
- php: ^8.0
- laravel/framework: ^9.0|^10.0
Requires (Dev)
- laravel/pint: ^1.1
- nunomaduro/larastan: ^2.1
- orchestra/testbench: ^7.7
- phpstan/phpstan-strict-rules: ^1.4
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
。