antwerpes / data-transfer-object
PHP数据对象的简单JSON编码和解码
1.0.3
2024-09-12 11:31 UTC
Requires
- php: ^8.2
Requires (Dev)
- chiiya/code-style-php: ^3.0
- friendsofphp/php-cs-fixer: ^3.21.1
- phpro/grumphp: ^2.7
- phpunit/phpunit: ^10.3.2
This package is auto-updated.
Last update: 2024-09-12 11:31:40 UTC
README
一个简单的库,用于将JSON结构编码和解码为PHP对象,例如以强类型方式处理API响应。
安装
您可以通过composer安装此包
composer require antwerpes/data-transfer-object
用法
定义一个扩展Antwerpes\DataTransferObject\DataTransferObject
的类,并定义对象的结构
use Antwerpes\DataTransferObject\Attributes\Cast; use Antwerpes\DataTransferObject\Attributes\Map; use Antwerpes\DataTransferObject\Casts\ArrayCaster; use Antwerpes\DataTransferObject\DataTransferObject; class User extends DataTransferObject { public function __construct( public string $name; #[Cast(CustomDateCaster::class)] public DateTimeInterface $birthday; #[Map(from: 'address.city')] public string $city; #[Cast(ArrayCaster::class, itemType: Interest:class)] public array $interests; ) {} }
然后您可以使用该类将JSON字符串解码为PHP对象
$json = '{ "name": "John Doe", "birthday": "1990-01-01", "address": { "city": "New York" }, "interests": [ { "name": "Music" }, { "name": "Programming" } ] }'; $user = User::decode(json_decode($json, true)); $encoded = $user->encode();
自定义转换器
您可以通过实现Antwerpes\DataTransferObject\CastsProperty
接口来定义自定义转换器
use Antwerpes\DataTransferObject\CastsProperty; class CustomDateCaster implements CastsProperty { public function unserialize(mixed $value): DateTimeInterface { return new DateTime($value); } public function serialize(mixed $value): string { return $value->format('Y-m-d'); } }
映射
您可以使用Map
属性将嵌套属性映射到扁平结构
use Antwerpes\DataTransferObject\Attributes\Map; class User extends DataTransferObject { #[Map(from: 'address.city', to: 'address.city')] public string $city; }
验证
验证不在本包的范围内,请使用JSON模式或如symfony/validator
等其他库来验证对象。
变更日志
有关最近更改的更多信息,请参阅CHANGELOG
贡献
欢迎贡献!在GitHub上提交问题,或创建一个Pull Request。
致谢
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件