heseya / dto
此包最新版本(1.0.2)没有可用的许可证信息。
Heseya Dto 可选属性
1.0.2
2024-03-18 09:47 UTC
Requires
- php: ^8.0
- laravel/framework: ^8.0|^9.0|^10.0|^11.0
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()
类实例,如果不显式设置。