clea/hydrator

此包已被废弃且不再维护。未建议替代包。

1.1 2017-09-29 06:31 UTC

This package is not auto-updated.

Last update: 2022-10-29 18:41:16 UTC


README

描述

简单的PHP hydration,支持嵌套对象和集合

要求

PHP >= 7.0

安装

使用composer

composer require clea/hydrator

工作原理

hydrator基于属性的getter返回类型来确定类型

public function getName(): string
{
    ...
}

这会将变量简单地转换为字符串。

Transformer类用于在调用setter之前对值进行类型转换或操作。

您可以在示例部分中查看如何添加自定义转换函数。

为了能够注入嵌套对象,您必须定义getter的返回类型

public function getNestedClass(): MyNestedClass
{
    ...
}

用法

选项

        $settings = [
            "additional_type" => [
               MyNumber::class => function($value){
                    return new MyNumber($value);
               }
               //...
            ],
            "cache" => true
        ];

示例

use Clea\Hydrator\Hydrator;

$data = [
    "string" => "value 1",
    "number" => "10",
    "notHydrated" => "test",
    "nested" => [
        "field" => "2017-10-10"
    ],
    "collection" => [
        ["field" => "10.42"],
        ["field" => "10.42"]
    ] 
];

$hydrator = new Hydrator();
$data = $this->getUserData();

$user = $hydrator->hydrate(User::class, $data);
        

简单字段转换为字符串

class User
{
    //...
    
    /**
     * @var string
     */
    private $string;

    /**
     * @return string
     */
    public function getString(): string
    {
        return $this->string;
    }
    
    //...
} 

简单字段转换为数字

class User
{
    //...
    
    /**
     * @var int
     */
    private $number;

    /**
     * @return int
     */
    public function getNumber(): int
    {
        return $this->number;
    }
    
    //...
} 

未注入的字段

class User
{
    //...
    
    /**
    * @noHydrated
    * @var string
    */
    private $notHydrated;
    
    //...
} 

嵌套字段

class User
{
    //...
    
    /**
     * @var Nested
     */
    private $nested;

    /**
     * @return Nested
     */
    public function getNested(): Nested
    {
        return $this->nested;
    }
    
    //...
} 

集合字段

在这种情况下,您需要使用以下相同的语法,注释用于获取集合中实体的类型

您需要给出您类的完整名称:* @var \MyProject\Message[]

class User
{
    //...
    
    /**
     * @var \MyProject\UserChild[]
     */
    private $collection;

    /**
     * @return \MyProject\UserChild[]
     */
    public function getCollection(): array
    {
        return $this->collection;
    }
    
    //...
} 

如果您想做出贡献,请随时联系我/创建一个pull request。

MIT许可(MIT)。请参阅LICENSE获取更多信息。