liamhackett / valueobjectcompiler
从JSON编译严格类型、只读值对象
0.0.2
2023-12-29 11:01 UTC
Requires
- php: ^8.2||^8.3
- symfony/console: *
- symfony/process: *
Requires (Dev)
- doctrine/coding-standard: ^12.0
- php-coveralls/php-coveralls: ^2.7.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.4
- roave/security-advisories: dev-latest
This package is auto-updated.
Last update: 2024-08-29 12:38:50 UTC
README
目前处于alpha版本
此包接收源文件,如JSON,并创建严格类型、PSR12、只读值对象。
目标是逐步支持更多文件格式,以相同的文件输出。
安装
composer require --dev liamhackett/valueobjectcompiler
如何使用
单个JSON文件编译器
vendor/bin/ValueObjectCompiler compile:json {jsonLocation} --outputDir={dir}
单个文件编译器将接收一个JSON文件,并输出其值对象表示。默认情况下,它将在当前目录中输出,但您可以使用outputDir
标志指定自己的目录。
示例
example.json
{ "id": 12, "name": "Json Object", "status": "Published", "tags": ["tag1", "tag2", "tag3"], "sub_objects": [ { "name": "Hello", "value": 13.132 }, { "name": "World", "value": null } ] }
Example.php
<?php readonly class Example { /** * @var string[] $tags * @var SubObject[] $subObjects */ public function __construct( public int $id, public string $name, public string $status, public array $subObjects, public array $tags, ) { } /** * @return self[] */ public static function hydrateMany(array $bulkData): array { $result = []; foreach ($bulkData as $data) { $result[] = self::hydrate($data); } return $result; } public static function hydrate(array $data): self { if (!isset($data['id'], $data['name'], $data['status'], $data['sub_objects'], $data['tags'])) { throw new \RuntimeException('Missing required parameter'); } return new self( id: $data['id'], name: $data['name'], status: $data['status'], subObjects: SubObject::hydrateMany($data['sub_objects']), tags: $data['tags'], ); } }
SubObject.php
<?php readonly class SubObject { public function __construct( public string $name, public ?float $value = null, ) { } /** * @return self[] */ public static function hydrateMany(array $bulkData): array { $result = []; foreach ($bulkData as $data) { $result[] = self::hydrate($data); } return $result; } public static function hydrate(array $data): self { if (!isset($data['name'])) { throw new \RuntimeException('Missing required parameter'); } return new self( name: $data['name'], value: $data['value'] ?? null, ); } }