thecodingmachine/fluid-hydrator

MetaHydrator 类的流体构建器

1.x-dev 2018-11-06 16:55 UTC

This package is auto-updated.

Last update: 2024-09-07 06:16:43 UTC


README

此软件包基于 thecodingmachine/metahydrator,旨在简化实例化代码(即在不使用依赖注入的情况下)。为了做到这一点,它遵循流畅的设计模式。

如何使用

正如你可能已经推断出的那样,此包的主要类是 FluidHydrator。它实现了 Hydrator 接口(有关更多详细信息,请参阅 mouf/tdbm-hydrator)。

$hydrator = new FluidHydrator;

原始类型

使用方法 field 声明一个原始字段。然后,使用 int()bool()string() 等声明其类型。

$hydrator->field('foo')->int();

要声明一个非结构化数组字段(通常是一些解码后的 JSON),请使用 simpleArray 函数。

$hydrator->field('foo')->simpleArray();

由于这些可以按以下方式链式使用

$hydrator
    ->field('foo')->string()->then()
    ->field('bar')->int() // Note that call o method then() is optional!
    ->field('baz')->float()
;

类型方法导致一个可以添加选项到字段的状态,主要是验证器。

$hydrator
    ->field('foo')->string()->required()->maxLength(55)
;

数组

选项 array() 允许将当前类型从 T 改为数组,其中当前验证器用于验证每个条目。这些可以使用多次。

$hydrator
    // 'foo' must be an array of non-empty arrays containing non-empty strings of length inferior to 55
    ->field('foo')->string()->required()->maxLength(55)->array()->required()->array()
;

对象类型

您还可以使用非原始类型(即类)来声明 field()。然后,方法 object() 需要您指定用于解析子数据的 hydrator。您可以使用方法 hydrator() 传递现有的 hydrator

$hydrator
    ->field('garply')->object(Garply::class)->hydrator($garplyHydrator)
;

或者甚至使用默认 hydrator(即 TDBMHydrator),如果您不想检查数据的有效性

$hydrator
    ->field('garply')->object(Garply::class)->hydrator()
;

如果您想在运行时声明子 hydrator,您可以:在 begin()end() 之间声明它

$hydrator
    ->field('garply')->object(Garply::class)
    ->begin()
        ->field('qux')->string()
        ->field('quux')->bool()
    ->end()
;

请注意,在 end()hydrator() 之后,您处于与编写原始字段时相同的状态。因此,您可以添加验证器,甚至使用 array() 从 T 切换到 T[]!

子对象

在某些情况下,您可能希望从正在填充的最顶层值访问子对象。这样,现有值不会被替换,而是直接填充,尊重引用并允许部分编辑。

您在这里需要的字段类型是 subobject();写法与 object() 非常相似,只是不应该使用 array() 选项,因为它(目前)不受支持。

$hydrator
    ->field('garply')->subobject(Garply::class)
    ->begin()
        ->field('qux')->string()
        ->field('quux')->bool()
    ->end()->required()
;