habemus/吸尘器

此包已被弃用且不再维护。作者建议使用 apdev/lawn-mower 包。

独立的数据过滤类

v1.4.0 2023-07-19 16:41 UTC

This package is auto-updated.

Last update: 2023-07-19 16:59:27 UTC


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 - 字段必须是有效的整数。
  • 布尔值 - 字段必须是一个有效的布尔值。接受的值有 truefalse01'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
);

第三个可选参数(truefalse)用于指示 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 年开发的软件包。

https://habemus.agency/it/