brendt / php-make-object
为 symfony/serializer 的 90% 用例提供的简单封装
0.5.0
2022-12-01 10:14 UTC
Requires
- php: ^8.1
- illuminate/collections: ^9.42
- phpdocumentor/reflection-docblock: ^5.3
- symfony/property-access: ^6.0
- symfony/serializer: ^6.0
- symfony/validator: ^6.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- larapack/dd: ^1.1
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-09 16:32:27 UTC
README
写这个
$post = make(Post::class)->from($postData);
而不是这个
$reflectionExtractor = new ReflectionExtractor(); $phpDocExtractor = new PhpDocExtractor(); $propertyTypeExtractor = new PropertyInfoExtractor( listExtractors: [$reflectionExtractor], typeExtractors: [$phpDocExtractor, $reflectionExtractor], descriptionExtractors: [$phpDocExtractor], accessExtractors: [$reflectionExtractor], initializableExtractors: [$reflectionExtractor] ); $normalizer = new ObjectNormalizer( propertyTypeExtractor: $propertyTypeExtractor ); $arrayNormalizer = new ArrayDenormalizer(); $serializer = new SymfonySerializer( normalizers: [ $arrayNormalizer, $normalizer, ], encoders: [ new XmlEncoder(), new JsonEncoder(), ], ); $post = $serializer->denormalize($postData, Post::class)
安装
您可以通过 composer 安装此包
composer require brendt/php-make-object
用法
此包抽象化了使用 symfony/serializer 进行复杂反序列化所需的所有配置。您只需要说明您想要创建哪个类,提供一些输入(数组、JSON、XML、文件或对象),然后此包将处理其余部分。
额外优惠:正确的静态分析,因此您将知道创建了什么类型的对象。
$post = make(Post::class)->from($postData);
输入类型
数组
$post = make(Post::class)->from([ 'title' => 'test', ]);
JSON
$post = make(Post::class)->from(<<<JSON { "title": "test" } JSON);
XML
$post = make(Post::class)->from(<<<XML <post> <title>test</title> </post> XML);
文件
$post = make(Post::class)->from(__DIR__ . '/post.json');
Make
接口
Make
接口可以添加到任何类中,使该类能够提供用于创建对象的数据。
$post = make(Post::class)->from(new PostRequest());
final class PostRequest implements Makes { public function data(): array { return [ 'title' => 'test', ]; } }
集合
$posts = make(Post::class)->fromCollection([ ['title' => 'a'], ['title' => 'b'], ['title' => 'c'], ]);
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG。
贡献
有关详细信息,请参阅 CONTRIBUTING。
致谢
许可协议
MIT 许可协议(MIT)。有关更多信息,请参阅 许可文件。