new-inventor / data-structure
数据结构转换器和验证器配置
3.1.5
2018-01-19 15:00 UTC
Requires
- php: ^7.1
- new-inventor/php-type-checker: ^5.0
- new-inventor/transformers: ^1.0
- symfony/cache: ^3.3
- symfony/config: ^3.3
- symfony/validator: ^3.3
- symfony/yaml: ^3.3
Requires (Dev)
- codeception/codeception: 2.3.*
- phpunit/phpunit: ^5.7
- symfony/filesystem: 3.3.*
README
此实用程序为您提供数据结构元数据和一些有用的类。
使用此包,您可以转换数组到所需格式并将其递归地加载到对象中。
要加载的对象 必须实现 Loadable 或 DataStructureInterface 接口。
安装
composer require new-inventor/data-structure
示例
元数据配置
namespace: DataStructure\Namespace validation: constraints: - Callback: ['Some\Existing\Class', 'GetTrue'] getters: prop1: - GreaterThan: 0 properties: prop0: - GreaterThan: 0 properties: prop1: NewInventor\DataStructure\Transformer\ToInt prop2: transformers: - ToInt: ~ validation: - GreaterThan: 5 - LessThanOrEqual: 1000 prop3: transformers: - ToBool: - ['Some\Existing\Class', 'GetTrue'] prop4: transformers: - ToBool: - groups: forward - BoolToMixed: - static: ['Some\Existing\Class', 'bbb'] - const: ['Some\Existing\Class', 'AAA'] - groups: backward prop5: ~ prop6: transformers: - ChainTransformer: - ToString: ~ - CsvStringToArray: ~ - NewInventor\DataStructure\Transformer\InnerTransformer: - ToInt: ~ - groups: forward - ArrayToCsvString: - groups: backward prop7: default: 2222 transformers: - ToString: ~ - StringToDateTime: - 'd.m.Y' - groups: forward prop8: transformers: - ToArray: - groups: forward prop9: nested: class: DataStructure\Namespace\Structure
递归加载
您可以使用 RecursiveConstructor 递归地加载属性。
要使用此功能,您应在属性中添加 nested
参数,如下所示
prop: nested: class: DataStructure\Namespace\Structure
或
prop: nested: metadata: path: some/config baseNamespace: Some\Namespace class: DataStructure\Namespace\Structure
或
prop: nested: metadata: path: some/config/path.yml class: DataStructure\Namespace\Structure
命名空间
这是递归加载数据结构类的命名空间。
验证
这是 symfony 类验证配置。您可以直接将其传递到属性中
属性
这是您数据结构的属性。
属性具有以下参数
- default
- transformers
- validation
- nested
如果属性 === null(~),则默认 = null,没有转换器和验证器。如果属性是字符串,则默认 = null,默认转换器 = 此字符串
transformers
转换器是数组的数组。
在 yml 中如下所示
key: - name: value
因此,您可以设置转换器如下
transformers: - ToInt: ~
默认情况下,转换器是内部转换器,但您可以创建自己的并传递完整的类名到转换器配置
转换器可以接收数组或参数,参数可以是数组(1)带有保留字作为键;保留字
- static - 解释为类的静态属性
['class', 'propertyName']
- const - 解释为可以数组如静态或字符串的常量
- groups - 转换器组,默认
groups = ['default']
。
如果转换器部分在同一组中有多个转换器,则这些转换器将用 ChainTransformer 包装,因此相同
transformers: - ToInt: - groups: group1 - ToRange: - 1 - 10 - groups: group1
和
transformers: - ChainTransformer: - groups: group1 - ToInt: - ToRange: - 1 - 10
验证
这是 symfony 验证配置给定属性的获取器部分
默认值
默认值可以是任何值,并具有与转换器参数相同的保留键,但组。
Nested
这在递归加载部分中描述。
PropertiesTransformer
$metadata = (new Metadata\Loader($path))->loadMetadata(); $transformer = $metadata->getTransformer($groupName); $resArray = $transformer->transform($someArray);
或者您可以自己组合 PropertiesTransformer
RecursiveConstructor
此构造函数通过递归加载嵌套类来构建具有元数据的类。
链接
- 要仅使用转换器,请使用 https://github.com/new-inventor/transformers
- 要实现属性包,请使用 https://github.com/new-inventor/property-bag