gustavonecore / php-sanitizer
PHP 数据净化器
dev-master / 1.0.x-dev
2022-08-25 02:26 UTC
Requires
- php: >=7.0
Requires (Dev)
- phploc/phploc: *
- phpmd/phpmd: 1.5.*
- phpunit/phpunit: ^5.0
- sebastian/phpcpd: *
This package is auto-updated.
Last update: 2024-09-07 01:53:26 UTC
README
PHP 净化器和验证器
这是一个库,用于使用预定义的本地类型模板从任何来源净化您的输入。
为什么还需要另一个净化器? 因为我真的希望保持我的工具集尽可能小,并且不依赖于大型库/框架。
要求
- PHP >= v7.0
使用 composer 安装
composer require gustavonecore/php-sanitizer
使用示例
模板定义 首先,您必须定义您的模板
$filter = new Gcore\Sanitizer\Template\TemplateSanitizer([ 'first_name' => 'string', 'dob' => 'int', 'numbers' => 'int[]', 'test' => 'int', 'email' => 'email', 'email_wrong' => 'email', 'double' => 'double', 'boolean' => 'bool', 'datetime' => 'datetime', "persons[]" => [ 'name' => 'string', 'eyes' => 'int', 'address' => 'string[]', 'commits[]' => [ 'hash' => 'string', 'n_comments' => 'int', 'users' => 'string[]' ], ], ]);
必填字段 您可以强制净化过程要求字段,只需在规则末尾包含一个 !
,例如
$filter = new Gcore\Sanitizer\Template\TemplateSanitizer([ 'email' => 'email!', 'phone' => 'string!', 'first_name' => 'string', ]);
如果必填字段无效 如果输入包含无效数据(null)的必填字段,则库将抛出 Gcore\Sanitizer\Template\RequiredFieldsException
净化! 之后,您就可以净化任何输入了
// This will be your inut body from an user $input = [ 'first_name' => 'Gustavo', 'dob' => '10', 'numbers' => [1,2,3,'4','5'], 'foo' => [1,2,4], 'email' => 'gustavo.uach@gmail.com', 'email_wrong' => 'gustavo.uachgmail.com', 'double' => '7876', 'boolean' => true, 'datetime' => '2017-11-11 13:50:10', 'persons' => [ [ 'name' => 'jhon', 'eyes' => 2, 'address' => ['foo', 'bar', 'text'], 'commits' => [ 'hash' => '2221321n3kj12n3kj12n32j1', 'n_comments' => 900, 'users' => ['jhon', 'doe'], ], ], [ 'name' => 'albert', 'eyes' => 'wrong int here', 'address' => ['a', 'b', 1], 'commits' => null, ], ] ]; // All your data is clean now! awesome! $cleanOutput = $filter->sanitize($input); print_r($cleanOutput);
干净输出
前一个调用的输出
php examples/index.php Array ( [first_name] => Gustavo [dob] => 10 [numbers] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) [test] => [email] => gustavo.uach@gmail.com [email_wrong] => [double] => 7876 [boolean] => 1 [datetime] => DateTimeImmutable Object ( [date] => 2017-11-11 13:50:10.000000 [timezone_type] => 3 [timezone] => America/Santiago ) [persons] => Array ( [0] => Array ( [name] => jhon [eyes] => 2 [address] => Array ( [0] => foo [1] => bar [2] => text ) [commits] => Array ( [hash] => 2221321n3kj12n3kj12n32j1 [n_comments] => 900 [users] => Array ( [0] => jhon [1] => doe ) ) ) [1] => Array ( [name] => albert [eyes] => [address] => Array ( [0] => a [1] => b [2] => 1 ) [commits] => ) ) )
备注
- 模板中未定义的键将被净化器 忽略。
- 如果一个值与期望的类型不匹配,将返回 null
TODO
- 添加单元测试。 #1(进行中)
- 添加必填字段。
- 创建一个新的模板方法来定义 必填 字段。
- 改进此方法以允许嵌套字段
- 将策略选择器模块化更多,以允许通过新类型的数据扩展库。