eag/easy-hydrator 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

eag/easy-hydrator

最新稳定版本:1.2.0

Composer 安装命令:

composer require eag/easy-hydrator

包简介

Hydrate arrays to objects easily with PHP 8.0 and constructor injection

README 文档

README

  • easy!
  • PHP 8.0 support
  • constructor injection support
  • auto-resolving of DateTimeInterface string value
  • auto-retype based on param type declarations
  • nested objects support
  • customizable objects creation
  • cached

Install

composer require eag/easy-hydrator

Add to config/bundles.php:

return [ EAG\EasyHydrator\EasyHydratorBundle::class => [ 'all' => true, ], ];

Usage

Having value object with constructor injection:

namespace App\ValueObject; use DateTimeInterface; final class Person { private string $name; private int $age; private DateTimeInterface $metAt; public function __construct(string $name, int $age, DateTimeInterface $metAt) { $this->name = $name; $this->age = $age; $this->metAt = $metAt; } public function getName(): string { return $this->name; } public function getAge(): int { return $this->age; } public function getMetAt(): DateTimeInterface { return $this->metAt; } }

Use hydrator with array like this:

namespace App\Repository; use App\ValueObject\Person; use EAG\EasyHydrator\ArrayToValueObjectHydrator; final class HumanRepository { /**  * @var ArrayToValueObjectHydrator  */ private $arrayToValueObjectHydrator; public function __construct(ArrayToValueObjectHydrator $arrayToValueObjectHydrator) { $this->arrayToValueObjectHydrator = $arrayToValueObjectHydrator; } public function getPerson(): Person { return $this->arrayToValueObjectHydrator->hydrateArray([ 'name' => 'Tom', // will be retyped to int 'age' => '30', // will be retyped to DateTimeInterface 'metAt' => '2020-02-02', ], Person::class); // ... } }

Multiple Value Objects?

This is how you hydrate 1 item:

$singlePersonAsArray = [ 'name' => 'Tom', // will be retyped to int 'age' => '30', // will be retyped to DateTimeInterface 'metAt' => '2020-02-02', ]); /** @var Person $person */ $person = $this->arrayToValueObjectHydrator->hydrateArray($singlePersonAsArray, Person::class);

But how can we hydrate multiple items?

$manyPersonsAsArray = []; $manyPersonsAsArray[] = [ 'name' => 'Tom', // will be retyped to int 'age' => '30', // will be retyped to DateTimeInterface 'metAt' => '2020-02-02', ]; $manyPersonsAsArray[] = [ 'name' => 'John', // will be retyped to int 'age' => '25', // will be retyped to DateTimeInterface 'metAt' => '2019-12-31', ]; /** @var Person[] $persons */ $persons = $this->arrayToValueObjectHydrator->hydrateArrays($manyPersonsAsArray, Person::class);

Optionable values

If object has optional parameters, and some of their values are not provided in data, default value is used in the hydrated object.

class MyObject { private string $foo; private string $bar; public function __construct(string $foo, string $bar = 'bar') { $this->foo = $foo; $this->bar = $bar; } public function getFoo(): string { return $this->foo; } public function getBar(): string { return $this->bar; } } $data = [ 'foo' => 'foo', ]; $object = $this->arrayToValueObjectHydrator->hydrateArray($data, MyObject::class); // bar $object->getBar();

Missing constructor data

When not provided data for required constructor parameter, EAG\EasyHydrator\Exception\MissingDataException is thrown.


Report Issues

In case you are experiencing a bug or want to request a new feature head over to the Symplify monorepo issue tracker

Contribute

The sources of this package are contained in the Symplify monorepo. We welcome contributions for this package on symplify/symplify.

统计信息

  • 总下载量: 46.77k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 0
  • Forks: 3
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-01-04

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固