influx/sanitizer

dev-main 2020-11-12 12:10 UTC

This package is auto-updated.

Last update: 2024-09-12 20:57:20 UTC


README

codecov Main workflow

描述

一个简单的应用程序,允许您使用一些指定的数据类型来净化输入。

它提供了6种默认数据类型

  • 字符串
  • 整数
  • 浮点数
  • 一种类型元素数组
  • 俄罗斯联邦电话号码
  • 结构

它还提供了2种默认输入类型

  • 数组
  • JSON

您可以通过添加自定义数据类型和解析器来扩展这些列表。

安装

composer require influx/sanitizer

使用方法

1. 实例化净化器

$sanitizer = new Sanitizer($customDataTypes = [CustomDataType::class], $customParsers = [CustomParser::class])

注意事项:

  • 自定义数据类型必须实现Influx\Sanitizer\DataTypes\Contracts\Validatable接口
  • 如果您的数据类型可以准备进行验证,则应实现Influx\Sanitizer\DataTypes\Contracts\PreparesForValidation接口
  • 如果您的数据类型在验证后可以准备进行传输,则应实现Influx\Sanitizer\DataTypes\Contracts\PreparesForTransmission接口
  • 自定义解析器必须实现Influx\Sanitizer\Services\DataParsers\Contracts\Invokable接口
2. 准备规则

您可以将任何数据和选项传递给规则数组。

注意事项:

  • 每个规则都需要一个sanitizer_data_type字段,您应将所需的数据类型放入其中
  • 传递给规则的其它字段将出现在array $options变量中的确切数据类型

示例

$rules = [
    'some_integer_field' => ['sanitizer_data_type' => 'integer'],
    'some_string_field' => ['sanitizer_data_type] => 'string'],
    'some_structure_field' => ['sanitizer_data_type' => 'structure', ['structure' = ['*' => ['key']]],
    'some_one_type_elements_array_field' => ['sanitizer_data_type => 'one_type_elements_array', 'elements_type' => 'integer'],
]
3. 准备数据

$data = ['some_integer_field' => '123test']

$data = '{
  "some_integer_field": "123test",
  "some_string_field": "123test",
  "some_float_field": "123456.45",
  "some_russian_federal_phone_number_field": "0500"
}'
4. 净化

$result = $sanitizer->sanitize($data, $dataFormat, $rules)\

注意事项

  • 您也可以在第一个参数中传递数据作为$value => $rule,而不指定字段名称。
  • 如果您传递的是一个数组作为第一个参数,它将不会被解析,并将按原样处理,否则它将使用指定的数据格式解析器进行解析。

$result:

  • 如果发生“全局”错误(例如,提供了无效的规则,数据无法解析)它将包含在'global_errors'字段中的错误。
  • 如果任何验证失败,它将包含在'sanitation_errors'字段中的错误数组。
  • 如果数据通过了净化,它将包含在'sanitized_data'字段中的净化数据数组。

数据类型信息

不同的数据类型需要不同的信息。
每个数据类型至少需要一个值来处理。它将来自输入。
但一些数据类型需要选项。它们将来自规则数据。

  • 一种类型元素数组需要elements_type选项

这意味着您应该这样与之交互

$rules = [
    'some_one_type_elements_array_field' => ['data_type => 'one_type_elements_array', 'elements_type' => 'integer'],
]
  • 结构需要'结构'选项

这意味着您应该这样与之交互

$rules = [
    'some_structure_field' => ['data_type' => 'structure', ['structure' = ['*' => ['key']]],
]

其他数据类型不需要除了前面提到的sanitizer_data_type字段之外的内容。