thecodingmachine / fluid-hydrator
MetaHydrator 类的流体构建器
Requires
Requires (Dev)
- phpunit/phpunit: ^5.7.27
- satooshi/php-coveralls: ^1.0.2
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() ;