influx / sanitizer
JSON净化器
dev-main
2020-11-12 12:10 UTC
Requires
- php: ^7.4
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^9.4
- squizlabs/php_codesniffer: ^3.5
This package is auto-updated.
Last update: 2024-09-12 20:57:20 UTC
README
描述
一个简单的应用程序,允许您使用一些指定的数据类型来净化输入。
它提供了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字段之外的内容。