fatcode / hydration
PHP7 的填充/提取库
1.0.0
2019-04-18 20:22 UTC
Requires
- php: >=7.2.0
- ext-bcmath: *
- ext-json: *
- ext-mbstring: *
- fatcode/enum: >=1.0.0
- psr/simple-cache: >=1.0.1
- symfony/cache: >=4.2
Requires (Dev)
- fzaninotto/faker: >=1.8
- mockery/mockery: >=1.2
- phpunit/phpunit: >=8.0
- squizlabs/php_codesniffer: >=3.0
- vimeo/psalm: >=3.2
This package is auto-updated.
Last update: 2024-09-19 08:27:28 UTC
README
安装
composer require fatcode/hydration
Hydration
Hydration 是一个从一组数据中填充对象的过程。存储库提供填充和提取数据集的机制和接口。
模式
模式是一个描述数据集如何填充的对象。应该将模式注册到 \FatCode\Hydration\ObjectHydrator
中,以便您的数据可以轻松地进行填充/提取。
<?php use FatCode\Hydration\Schema; use FatCode\Hydration\Type; class MyUser { private $id; private $name; private $age; private $interests = []; public function __construct(int $id, string $name, int $age) { $this->id = $id; $this->name = $name; $this->age = $age; } } class MyUserSchema extends Schema { protected $id; protected $name; protected $age; protected $interests; public function __construct() { $this->id = Type::id(); $this->name = Type::string(); $this->age = Type::integer(); $this->interests = Type::array(); } // Target class has to be provided so schema knows to which class it is corresponding. public function getTargetClass() : string { return MyUser::class; } }
注意:请确保您的模式属性是受保护的或公共的,这样它们就可以从父类中访问。私有属性将不会被识别,这可能导致
null
值或错误。
在上面的代码中,我们定义了域类 MyUser
和相应的模式类 MyUserSchema
。有了这个设置,我们就可以开始填充/提取过程。
使用 ObjectHydrator
进行填充
\FatCode\Hydration\ObjectHydrator
既是所有模式类的注册表,也是通用填充/提取功能提供商。这可能听起来这个类承担了太多的责任,但请记住,在填充/提取过程发生之前,必须通过模式进行描述,而 ObjectHydrator
提供了简化您提取/填充和模式加载工作流程的实用工具。
为了填充/提取对象,必须由 ObjectHydrator
识别模式。有两种方法可以实现这一点:
- 将模式传递给
\FatCode\Hydration\ObjectHydrator::addSchema
方法 - 实现并传递
\FatCode\Hydration\SchemaLoader
实例给\FatCode\Hydration\ObjectHydrator::addSchemaLoader
方法
从现在开始,我们将关注第一种方法。
在 ObjectHydrator
中注册模式
<?php use FatCode\Hydration\ObjectHydrator; $objectHydrator = new ObjectHydrator(); $objectHydrator->addSchema(new MyUserSchema());
上述代码注册了上一章中提供的模式。从这一点开始,任何 MyUser
类的实例都可以使用 ObjectHydrator
进行填充或提取。
填充对象
<?php use FatCode\Hydration\ObjectHydrator; $objectHydrator = new ObjectHydrator(); $objectHydrator->addSchema(new MyUserSchema()); // Hydration $bob = $objectHydrator->hydrate( [ 'id' => 1, 'name' => 'Bob', 'age' => 30, 'interests' => ['Flowers', 'Judo', 'M1lf$'] ], MyUser::class );
提取对象
<?php use FatCode\Hydration\ObjectHydrator; $objectHydrator = new ObjectHydrator(); $objectHydrator->addSchema(new MyUserSchema()); $bob = new MyUser(1, 'Bob', 30); $dataset = $objectHydrator->extract($bob); // ['id' => 1, 'name' => 'Bob', 'age' => 30, 'interests' => []]