new-inventor/data-structure

数据结构转换器和验证器配置

3.1.5 2018-01-19 15:00 UTC

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

此构造函数通过递归加载嵌套类来构建具有元数据的类。

链接