habemus / 吸尘器
Requires
- symfony/mime: ^5.2
Requires (Dev)
- fzaninotto/faker: ^1.9
- phpunit/phpunit: ^8
README
Vacuum 是一个基于 Laravel Validation 的轻量级独立库,用于数据验证。
安装
$ composer require habemus/vacuum-cleaner
基本用法:Cleaner 对象
使用输入数据实例化 Cleaner::class 并使用内置过滤器进行验证。Cleaner::class 仅接受数据数组作为输入。数据可以是任何原生数据类型或对象。原生 PHP 文件数组将被转换为 FileUpload::class 对象。
use Habemus\Vacuum\Cleaner; $validator = new Cleaner(array_merge($_POST,$_FILES)); $validated = $validator->validate([ 'name' => 'required|string|max:25', 'email' => 'required|email', 'phone' => 'nullable|digits:11', 'privacy' => 'required|boolean', 'quantity' => 'required|integer|gt:1', 'upload' => 'present|file|mimes:png,jpg|max:2000000', ]);
结果
要检查输入是否已验证,请使用 isValid() 方法。validate() 方法返回已成功验证的数据,即使不是所有输入数据都经过验证。
$validated = $validator->validate([ ... ]); if($validator->isValid()){ //handle $validated data ... }else{ //display errors $errors = $validator->errors(); }
过滤器
过滤器必须包含在数组中或由 |
分隔。过滤器参数必须在 :
之后指定,并由逗号 ,
分隔。
$validator->validate([ 'field1' => 'filter1|filter2|filter3|...', 'field2' => 'filter1_with_params:param1,param2,param3|filter2', 'field3' => [ 'filter1', 'filter2', 'filter3_with_params:param1,param2', ], ]);
可用过滤器
- required - 字段必须存在且不为空,空字符串,空数组或空文件。
- nullable - 字段可以省略。
- present - 字段必须存在,但其内容不进行检查。
- bail - 在此过滤器之后,一旦过滤器失败即停止执行检查。
- email - 字段必须是有效的电子邮件。
- url - 字段必须是有效的 URL。
- alpha_num - 字段必须只包含字母和数字。
- alpha - 字段必须只包含字母。
- numeric - 字段必须只包含数字。
- digits:size - 字段必须只包含数字字符,并且长度必须正好为 size。
- mimes:extension1,extension2,... - 字段必须是有效的 FileUpload,并且与指定的 extensions 匹配。扩展名通过文件的 MIME 类型及其二进制数据来猜测。
- file - 字段必须是有效的文件上传(由用户上传)。
- size:value - 字段大小必须正好为 value。适用于数组、字符串和文件。
- in:value1,value2,... - 字段必须是指定的值之一。
- gte:value - 字段必须大于或等于 value。适用于数字。
- gt:value - 字段必须大于 value。适用于数字。
- lt:value - 字段必须小于 value。适用于数字。
- lte:value - 字段必须小于或等于 value。适用于数字。
- min:value - 字段的大小必须大于或等于 value。适用于数组和文件。
- max:value - 字段的大小必须小于或等于 value。适用于数组和文件。
- integer - 字段必须是有效的整数。
- 布尔值 - 字段必须是一个有效的布尔值。接受的值有
true
,false
,0
,1
,'true'
,'false'
。 - 字符串 - 字段必须是一个字符串。
- 日期 - 字段必须是一个有效的日期。
- 缩略名 - 字段只能包含小写字母、数字和
-
。
自定义过滤器
可以通过使用 CustomFilter::class
编写自己的过滤器。类的构造函数接受一个 Closure
作为参数。闭包必须有一个 $value 参数,并在验证成功时返回 true
,在验证失败时返回 false
。
use Habemus\Vacuum\Cleaner; use Habemus\Vacuum\Filters\CustomFilter; $input = [ 'murphy' => "Anything that can go wrong will go wrong", ]; $validator = new Cleaner($input); $subject = 'wrong'; $data = $validator->validate([ 'murphy' => [ 'required', 'string', new CustomFilter(function($value) use ($subject) { if(strpos($value,$subject) !== false){ return true; } return false; }), ], ]);
自定义过滤器还具有在评估数据时运行净化函数的能力。只需将净化函数(Closure
)作为第二个参数传递给构造函数。
$mySpaceRemoverFilter = new CustomFilter( function($value){ if(is_string($value)){ return true; } return false; }, function($value){ return str_replace(' ','',$value); }, true );
第三个可选参数(true
或 false
)用于指示 Cleaner::class
实例在过滤器验证之后执行净化函数。否则,净化函数始终首先执行。
请求对象
Request::class
是一个围绕 Cleaner::class
验证实例的小型包装器,它可以加快从表单中验证 HTTP 请求数据的速度。
use Habemus\Vacuum\Request; $request = new Request(); //init from $_GET,$_POST,$_FILES global vars $request = new Request($custom_data); //init with custom data $validated_data = $request->validate($filters, $custom_validation_msgs = null, $sanitizer_fn = null); //validate data from request $request->isValid(); // true or false $request->getErrors(); //populated after validate() $request->getValidated(); //populated after validate() $request->getData(); // retrieve input data
文件上传
这个类有一些方便的方法来帮助您处理通过表单上传的文件。当调用 FileUpload::class
构造函数时,在尝试猜测文件扩展名或重命名时可能会抛出 RuntimeException
。当成功创建 FileUpload
实例时,上传的文件会自动重命名为上传名称,避免重复和覆盖。如果您打算保留上传的文件,则必须调用 store($destination_path)
方法,因为类的析构函数将在退出时自动删除文件。
类方法
- isEmpty() - 检查文件是否为空
- rename($new_path) - 将文件移动到新路径
- store($path) - 将文件保存到
$path
- getPath() - 返回当前文件的完整路径
- getFilename() - 返回不带路径的 filename.ext
- getExtension() - 返回文件扩展名
- getMime() - 返回文件的 MIME 类型
现在 File 和 FileUpload 是单独的实体。tmp_path 不再存在,请使用 getPath()
代替。
错误信息
要获取消息,请使用 errors()
。
$errors = $validator->errors(); /* //output $errors = [ 'field1_name' => [ 'filter1_name' => 'Error Message', 'filter2_name' => 'Error Message', ], 'field2_name' => [ 'filter1_name' => 'Error Message', 'filter2_name' => 'Error Message', ], ]; */
这样,您可以检查字段是否存在以及发生了哪种错误。还可以通过将包含自定义消息的 array
作为第三个参数传递给 Cleaner::class
构造函数,为特定字段指定自定义错误消息。
$custom_messages = [ 'field1_name' => 'Il campo non è valido!', 'field2_name' => 'You can use ###field### placeholder.', ]; $validator = new Cleaner($input_array,$custom_messages_array);
其他选项
可以通过在初始化 Cleaner
时传递一个 Closure
作为第三个参数来净化所有字段。
$sanitize_all = function($value){ if(is_string($value)){ return trim($value); } return $value; }; $validator = new Cleaner($input_array, $custom_messages_array, $sanitize_all);
由 Habemus Agency 于 2021 年开发的软件包。