jamie_sharief/data-transfer-object

数据传输对象 (DTO)

0.1.2 2021-02-05 00:23 UTC

This package is auto-updated.

Last update: 2024-09-05 08:23:30 UTC


README

license build coverage status

创建

要创建一个 DataTransferObject,创建类并使用公共属性。

use DataTransferObject\DataTransferObject;

class Employee extends DataTransferObject
{
    public string $name;
    public string $email;
    public ?Employee $reportsTo;
    public int $age;
    public bool $active = true;

    /**
     * @var \App\DataTransferObject\Employee[] $subordinates
     */
    public array $subordinates = [];
}

然后设置数据

$employee = new Employee();
$employee->name = 'sarah';

在构造参数时,您还可以使用数组批量设置属性。注意,这仅设置,不转换或提取,请参阅 fromArray

 $sarah = new Employee([
            'name' => 'Sarah',
            'email' => 'sarah@example.com',
            'reportsTo' => $claire
        ]);

构建

当您使用 DataTransferObject 构造函数时,它简单地设置您提供的值,但是当您需要转换数据和类型时,您可以使用 fromArray 方法。

fromArray 提取相关数据,并且它

  1. 将内置类型 bool、int、string、float 等
  2. 将创建一个 DataTransferObjectDateTime 或任何具有 __set_state 魔术方法的其它对象。

它将只提取 DataTransferObject 中定义的字段,并且如果提取数据后 DataTransferObject 上的属性未初始化,则将抛出错误。

例如,相关的 DataTransferObjects,如 belongsTohasMany 将被打包。为了使 hasMany 工作正常,创建一个数组并设置如下 DocBlock 定义:

class Employee extends DataTransferObject
{
    public string $name;
    public string $email;
    public ?Employee $reportsTo;

    /**
     * @var \App\DataTransferObjects\Employee[] $subordinates
     */
    public array $subordinates = [];
}

使用 fromArray 方法

 $employee = Employee::fromArray([
    'name' => 'Sarah',
    'email' => 'sarah@example.com',
    'reportsTo' => [
        'name' => 'Claire',
        'email' => 'claire@example.com',
    ],
    'subordinates' => [
        [
            'name' => 'Jon',
            'email' => 'jon@example.com'
        ]
    ]
]);

转换为数组

如果对象具有 toArray 方法或没有 __toString 方法,则将 DataTransferObject 和任何 嵌套 对象转换为数组。

$employee->toArray();

序列化/反序列化

默认序列化方法是 JSON,对于不同的方法,例如 XML,您可以重写 serializedeserialize 方法。只有公共属性将在序列化和反序列化过程中使用。

转换为字符串

DataTransferObject 转换为字符串。

$employee->toString();

从字符串

将字符串转换为 DataTransferObject

$employee = Contact::fromString(
    '{"name":"Jon","company":"Snow Enterprises","email":"jon@example.com","age":33,"unsubscribed":false}'
);

初始化钩子

DataTransferObject 被构造时,如果它可用,将调用 initialize 方法,这是一个钩子,以防您需要重写构造函数。

异常处理

如果您尝试设置或获取一个不存在的属性,将抛出 RuntimeException

资源