funcke/dry_php

本包的最新版本(dev-master)没有可用的许可证信息。

Dry::Schema 和 Dry::Validation for php

dev-master 2020-09-29 18:47 UTC

This package is auto-updated.

Last update: 2024-09-29 05:22:22 UTC


README

典型的PHP应用程序需要不断地处理大量的if条件语句,以确定实体是否满足开发者在创建软件时设定的约束。

Dry提供了一种简单的方法来消除冗余的验证语句,并将任何类型实体的约束集中在单个文件中。只需在类实例上调用validate方法,即可验证提供的参数。

无论是有数组还是对象,Dry::PHP都不关心

您可以对实体进行多次验证

  • 在传递到端点时
  • 在存储到数据库之前
  • 在从文件或类似文件反序列化之后

使用Dry::PHP,您只需定义一个约束的单个文件并在数据上调用它。Dry::PHP支持以 [property => value] 形式的关联数组和标准PHP对象。在验证过程中,对象本身将被转换为数组,然后进行检查。

请注意:私有属性或从父类继承的属性也将包含在检查过程中!

示例

# ExampleSchema.php
<?php
use Dry\DryStruct;

class ExampleSchema extends DryStruct 
{
  public function __construct() {
    parent::__construct();
    self::required('name')->filled('string');
    self::optional('age')->filled('integer')->min(6);
    self::required_object('book')->do(function($book) {
      $book->required('title')->filled('string');
    });
    $this->required_array('buyers')->each(function($buyer) {
       $buyer->type('object')->do(function($buyer) {
         $buyer->required('name')->filled('string');
       });
     });
  }
}
# index.php
<?php
# validate expected schema
(new ExampleSchema())->validate(['name' => 'Richard', 'age' => 7, 'book' => (object) [
  'title' => 'Richard'
  ],
  "buyers" =>[
    (object)[
      "name" => "Richard"
    ],
    (object)[
      "name" => "Lorenz"
    ]
  ]
 ]);
# validate faulty schema => method call returns array with affected fields + violations
$result = (new ExampleSchema())->validate(['name' => 'Richard', 'age' => 4, 'book' => (object) [
'title' => 'Richard'
  ]
]);

print_r($result);
##
# output
# Array(
#   [buyers] => Array(
#     missing 
#   ) 
# )

支持的约束

  • filled: 属性的数据类型,根据期望的数据类型,将执行进一步评估
  • min: 数字属性的最低值
  • max: 数字属性的最高值
  • minLength: 字符串属性的最低长度
  • maxLength: 字符串属性的最高长度
  • minSize: 数组属性的最低大小
  • maxSize: 数组属性的最高大小
  • required_object: 将对象属性添加到目标模式。此对象需要有自己的验证配置!