peak/array-validation

用于数组结构的验证工具

3.2.0 2020-04-02 16:35 UTC

This package is auto-updated.

Last update: 2024-09-29 05:36:00 UTC


README

version Total Downloads License

安装

 composer require peak/array-validation

这是什么?

此组件通过以下方式帮助您验证数组结构:

  • 验证任何键值的类型
  • 确保具有预期键要求的某种数据结构
  • 通过仅允许一组键来防止结构污染

这在处理JSON数据请求时特别有用,在使用数据之前,您必须验证其内容,这样您就可以在之后使用业务逻辑检查这些键的值,而不用担心键值的类型或存在。

如何使用

8种用法

1- 通用“点菜式”验证(无状态)

$validator = new Validator();

if ($validator->expectExactlyKeys($data, $keys) === true) {
    // ...
}

2- 使用流畅接口进行验证(有状态)

$data = [ // data
    'tags' => [],
    'name' => 'foobar'
];
$validation = new Validation($data);

$validation
    ->expectExactlyKeys(['tags', 'name'])
    ->expectKeyToBeArray('tags');
    ->expectKeyToBeString('name');

if ($validation->hasErrors()) {
    // $lastError = $validation->getLastError();
    // $errors = $validation->getErrors();
}

3- 使用流畅接口进行严格验证(有状态)

$validation = new StrictValidation($data);

// will throw an exception if any of tests below fail
$validation
    ->expectOnlyKeys(['id', 'title', 'description', 'isPrivate', 'tags'])
    ->expectAtLeastKeys(['id', 'title', 'description'])
    ->expectKeyToBeInteger('id')
    ->expectKeysToBeString(['title', 'description'])
    ->expectKeyToBeBoolean('isPrivate')
    ->expectKeyToBeArray('tags');

// if we reach this point, it means the array structure is
// valid according to the validation rules above.

4- 创建用于以后使用的验证定义

$vDef = new ValidationDefinition();
$vDef
    ->expectOnlyKeys(['title', 'content', 'description'])
    ->expectAtLeastKeys(['title', 'content'])
    ->expectKeysToBeString(['title', 'content', 'description']);

$validation = new ValidationFromDefinition($vDef, $data);

if ($validation->hasErrors()) {
    // $validation->getErrors();
}

5- 创建用于以后使用的验证模式

模式是编写验证定义的另一种方式。此格式在您想要将模式存储在文件中(例如:json、php数组文件、yml等)时非常理想。

$mySchema = [
    'title' => [
        'type' => 'string',
        'required' => true
    ],
    'content' => [
        'type' => 'string',
        'nullable' => true,
    ],
];

$schema = new Schema(new SchemaCompiler(), $mySchema, 'mySchemaName');

$validation = new ValidationFromSchema($schema, $data);

if ($validation->hasErrors()) {
    // $validation->getErrors();
}

6- 使用验证定义进行严格验证

// all validation definitions are executed at object creation and an exception is thrown if any of tests failed
new StrictValidationFromDefinition($validationDefinition, $arrayToValidate);

7- 使用模式进行严格验证

// all validation definitions are executed at object creation and an exception is thrown if any of tests failed
new StrictValidationFromSchema($schema, $arrayToValidate);

8- 使用ValidationBuilder进行验证和严格验证

$validation = new ValidationBuilder();
$validation
    ->expectOnlyKeys(['title', 'content', 'description'])
    ->expectAtLeastKeys(['title', 'content'])
    ->expectKeysToBeString(['title', 'content', 'description']);

if ($validation->validate($data) === false)  {
    // $validation->getErrors();
    // $validation->getLastError();
}

以及严格验证

//  will throw an exception if any of tests fail
$validation->strictValidate($data);

验证方法

interface ValidationInterface
{
    public function expectExactlyKeys(array $keys);
    public function expectOnlyOneFromKeys( array $keys);
    public function expectAtLeastKeys(array $keys);
    public function expectOnlyKeys(array $keys);
    public function expectNKeys(int $n);
    public function expectKeyToBeArray(string $key, bool $acceptNull = false);
    public function expectKeysToBeArray(array $keys, bool $acceptNull = false);
    public function expectKeyToBeInteger(string $key, bool $acceptNull = false);
    public function expectKeysToBeInteger(array $keys, bool $acceptNull = false);
    public function expectKeyToBeFloat(string $key, bool $acceptNull = false);
    public function expectKeysToBeFloat(array $keys, bool $acceptNull = false);
    public function expectKeyToBeString(string $key, bool $acceptNull = false);
    public function expectKeysToBeString(array $keys, bool $acceptNull = false);
    public function expectKeyToBeBoolean(string $key, bool $acceptNull = false);
    public function expectKeysToBeBoolean(array $keys, bool $acceptNull = false);
    public function expectKeyToBeObject(string $key, bool $acceptNull = false);
    public function expectKeysToBeObject(array $keys, bool $acceptNull = false);
}