heseya/dto

此包最新版本(1.0.2)没有可用的许可证信息。

Heseya Dto 可选属性

1.0.2 2024-03-18 09:47 UTC

This package is auto-updated.

Last update: 2024-09-18 11:05:07 UTC


README

简单的Dto系统,具有可选参数。

安装

composer require heseya/dto

开始使用

要创建一个新的Dto,需要像这样扩展基本 Heseya\Dto\Dto

use Heseya\Dto\Dto;

class ExampleDto extends Dto {
    private string $property1;
    private string $property2;
}

Heseya\Dto\Dto 基类自动处理所有属性初始化的构造函数。

要创建一个新的Dto,使用 PHP 8 命名参数

$dto = new ExampleDto(property1: 'value1', property2: 'value2');

或者使用关联数组

$array = ['property1' => 'value1', 'property2' => 'value2'];

$dto = new ExampleDto($array);

内置的 toArray() 方法自动以关联数组格式返回Dto属性

$dto->toArray(); // ['property1' => 'value1', 'property2' => 'value2']

可选属性

要使Dto属性可选,需要使用 Heseya\Dto\Missing 类型,如下所示

use Heseya\Dto\Dto;
use Heseya\Dto\Missing;

class OptionalDto extends Dto {
    private string $required;
    private string|Missing $optional;
}

未初始化的可选属性将在 toArray() 方法结果中自动隐藏

$dto = new OptionalDto(required: 'required value')

$dto->toArray(); // ['required' => 'required value']

隐藏属性

有时您希望隐藏内部属性,使其不在 toArray() 方法结果中显示

您可以使用 Heseya\Dto\Hidden 属性来隐藏这些属性

use Heseya\Dto\Dto;
use Heseya\Dto\Hidden;

class HiddenDto extends Dto {
    private string $visible;
    #[Hidden]
    private string $hidden;
}

$dto = new HiddenDto(visible: 'visible value', hidden: 'hidden value');

$dto->toArray(); // [visible => 'visible value']

异常

必需属性需要在构造函数中显式设置,否则将引发 Heseya\Dto\DtoException

use Heseya\Dto\Dto;

class NonOptionalDto extends Dto {
    private ?string $param;
}

$dto = new NonOptionalDto(); // DtoException("Property NonOptionalDto::$param is required")

private ?string $param 这样的可空属性不会自动初始化为null,需要显式设置。

使用 Heseya\Dto\Missing 类型作为可选属性将自动初始化为 new Missing() 类实例,如果不显式设置。