phore/hydrator
最新稳定版本:v1.2.0
Composer 安装命令:
composer require phore/hydrator
包简介
Unserialize arrays into object structure
README 文档
README
serialize / unserialize plain into object structures. Hydrator parses the DocComments of public properties and instanciates the classes according to the definiton.
Examples:
Installation:
composer install phore/hydrator
Basic Example
class UserData { /** * @var string */ public $name; /** * Assoc Array * @var array<string, ClassType2> */ public $map; /** * @var int */ public $age; } $input = ["name"=>"bob", "age"=>37]; $userData = phore_hydrate($input, UserData::class); assert( $userData instanceof UserData);
$userData is a UserData Object and all properties casted correctly
to desired types specified in DocComments.
Recognized Annotations
- Simple types like
string,int,bool,float,array - Array types like
string[],int[]... - Object types
OtherClass - Arrays of Objects
OtherClass[] - Nullable properties
type|null
Guide
Getters / Setters
On objects, hydrator will try to set property values in the following order:
- If object has a
set<PropertyName>($value)-Method it will use it first - If the property is
publicit will be set directly - If there is a
__set($name, $value)method it will be used
Default Values
Default values will be applied if no data was found for the specific key
public $prop1 = []
Optional Properties
You can define a property as optional by adding |null to the
DocBlock.
/**
* @var SomeEntity1|null
*/
public $entity1;
If the input data was not found, the value will be null.
Filter input data before hydration
To ease backwards compatibility issues, the magick __hydrate() method
is called to prefilter the input data before it is hydrated.
class Entity1 { public $p1; public function __hydrate(array $input) : array { // .. modify input to match the object .. return $input; } }
Dealing with additional / undefined input data
By default, on undefined input keys, hydrator will throw an exception. You can toggle this behaviour
统计信息
- 总下载量: 4.32k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 2
- 依赖项目数: 11
- 推荐数: 1
其他信息
- 授权协议: MIT
- 更新时间: 2020-09-02