perfilov / php-dto-packer
将数组、json、对象转换为强类型值(及其反向转换),以在服务间传输
4.0.3
2023-03-02 00:00 UTC
Requires
- php: >=8.1
This package is auto-updated.
Last update: 2024-09-12 14:44:22 UTC
README
DtoPacker 是一个小巧的 PHP 库,用于将数据打包到强类型值对象结构中。当您需要在服务之间传输对象并发送到前端时使用它。
如果您需要额外的功能,请给我写信
PerfilovStanislav
安装
composer require perfilov/php-dto-packer
快速示例
准备结构
use DtoPacker\AbstractDto; class Family extends AbstractDto { public string $surname; protected array|Person $persons; public bool $hasCar; } class Person extends AbstractDto { public string $name; public \DateTime $birthday; protected PersonTypeEnum $type; protected array|string $friends; } enum PersonTypeEnum { case HUSBAND; case WIFE; case CHILD; }
从数组创建 DTO
$family = new Family([ 'surname' => 'Perfilov', 'persons' => [ [ // from array 'name' => 'Stanislav', 'birthday' => '1987-12-13T12:05:55+03:00', 'type' => 'HUSBAND', 'friends' => ['Elon Musk', 'Guy Ritchie'], ], new Person([ // or object 'name' => 'Natali', 'type' => PersonTypeEnum::WIFE, 'birthday' => \DateTime::createFromFormat('d.m.Y', '28.11.1994'), ]),[ 'name' => 'Leo', 'type' => 'CHILD', ], ], ]); // or set it manually $family->persons[2]->friends = ['Jason Statham', 'John Depp'];
将 DTO 转换为数组
$arr = $family->toArray(); Output: [ "surname" => "Perfilov" "persons" => [ [ "name" => "Stanislav" "birthday" => "1987-12-13T12:05:55+03:00" "type" => "HUSBAND" "friends" => ["Elon Musk", "Guy Ritchie"] ], [ "name" => "Natali" "birthday" => "1994-11-28T21:02:13+00:00" "type" => "WIFE" ], [ "name" => "Leo" "type" => "CHILD" "friends" => ["Jason Statham", "John Depp"] ] ] ]
将 DTO 转换为字符串/json
$json = (string)$family; Output: {"surname":"Perfilov","persons":[{"name":"Stanislav","birthday":"1987-12-13T12:05:55+03:00","type":"HUSBAND","friends":["Elon Musk","Guy Ritchie"]},{"name":"Natali","birthday":"1994-11-28T21:11:57+00:00","type":"WIFE"},{"name":"Leo","type":"CHILD","friends":["Jason Statham","John Depp"]}]}
从 json 创建 DTO
$family = new Family($json);