wijoc / validify-mi
PHP 和 WordPress 的独立验证。
Requires
- php: ^7.4 || ^8.0 || ^8.1 || ^8.2
This package is not auto-updated.
Last update: 2024-10-01 01:18:47 UTC
README
与过程式 PHP 和 WordPress 兼容的独立 PHP 验证。该项目提供了一组验证规则,以简化项目中数据验证,并针对 WordPress 项目提供特定数据清理。该项目深受 Laravel 验证和 rakit/validation 的影响,起源于个人需求,目前仍处于测试开发阶段。所有输入都受到高度重视。
目录
功能
- 简单的语法
- 支持多个验证规则
- 支持自定义错误消息
- 兼容过程式 PHP 和 WordPress
- 支持 WordPress 清理
- 支持嵌套验证
安装
您可以通过 Composer 安装库
composer require wijoc/validify-mi
使用
以下是使用 ::make 函数使用验证的方式。Validator::make 有 4 个参数
- 要验证的输入。
- 验证规则。
- 自定义验证消息。
- 清理规则。(目前仅适用于 WordPress 项目)所有参数应为数组。
<?php require 'vendor/autoload.php'; use Wijoc\ValidifyMI\Validator; $input = [ 'email' => 'user@example.com', 'age' => 25 ]; $rules = [ 'email' => ['required', 'email'], 'age' => ['required', 'numeric'] ]; $message = [ 'email.required' => "Email is required!", 'email.email' => "Email is invalid!", 'age.required' => "Age is required!", 'age.numeric' => "Age must be numeric!" ]; /** Create validator * * You can add sanitizer as 4th arguments * * (for now it's limited to wordpress sanitize) */ $validator = Validator::make($input, $rules, $message); if ($validator->fails()) { /** Validation failed */ print_r($validator->errors('all')); /** Get first error */ $validator->errors()->firstOfAll(); } else { /** Validation passed */ echo "Validation successful!"; /** get validated data */ $validated = $validator->validate(); }
您还可以使用以下方式验证嵌套输入
<?php require 'vendor/autoload.php'; use Wijoc\ValidifyMI\Validator; $input = [ 'email' => 'user@example.com', 'age' => 25, 'phoneNumber' => [ '123456789', '987654321' ], 'socialMedia' => [ 'facebook' => 'https://facebook.com', 'twitter' => 'https://twitter.com' ], 'address' => [ [ 'city' => 'Jakarta', 'province' => 'DKI Jakarta', 'postalCode' => '123' ] ] ]; $rules = [ 'email' => ['required', 'email'], 'age' => ['required', 'numeric'], 'phoneNumber' => ['min:1'], 'phoneNumber.*' => ['numeric'], 'socialMedia.facebook' => ['required'], 'address.*.postalCode' => ['required', 'numeric'], ]; $message = [ 'email.required' => "Email is required!", 'email.email' => "Email is invalid!", 'age.required' => "Age is required!", 'age.numeric' => "Age must be numeric!" ]; /** Create validator * * You can add sanitizer as 4th arguments * * (for now it's limited to wordpress sanitize) */ $validator = Validator::make($input, $rules, $message); if ($validator->fails()) { /** Validation failed */ print_r($validator->errors('all')); } else { /** Validation passed */ echo "Validation successful!"; }
说明
首先,我们准备所有必要的参数来初始化验证器。
- 要验证的输入
/** Input Value to validate */ $input = [ 'email' => 'user@example.com', 'age' => 25 ];
- 验证规则
/** Validation Rule */ $rules = [ 'email' => ['required', 'email'], 'age' => ['required', 'numeric'] ];
- 自定义验证消息
$message = [ 'email.required' => "Email is required!", 'email.email' => "Email is invalid!", 'age.required' => "Age is required!", 'age.numeric' => "Age must be numeric!" ];
然后,我们使用准备好的参数使用 Validator::make() 函数初始化它。
/** Create validator * * You can add sanitizer as 4th arguments * * (for now it's limited to wordpress sanitize) */ $validator = Validator::make($input, $rules, $message);
之后,我们可以使用 validate() 或 fails() 函数检查输入是否已验证:如果所有输入都经过验证,则 validate() 将返回 true,如果没有经过验证,则返回 false。
/** Using validate() function */ $validator->validate()
或者另一方面,fails() 将在输入验证通过时返回 false,在所有输入都没有验证时返回 true。
/** Using fails function */ $validator->fails()
示例
if ($validator->fails()) { /** Validation failed */ print_r($validator->errors('all')); } else { /** Validation passed */ echo "Validation successful!"; }
如果数据未通过验证,我们可以使用 errors('all') 函数检索所有错误。'all' 参数是必需的,以便获取所有错误。
if ($validator->fails()) { /** Validation failed */ print_r($validator->errors('all')); } else { /** Validation passed */ echo "Validation successful!"; }
或者,如果您只想获取第一个错误,您可以在 errors() 函数之上使用 firstOfAll() 方法。请注意:如果您使用 firstOfAll(),则不需要将 'all' 参数添加到 errors() 函数中。
if ($validator->fails()) { /** Validation failed */ print_r($validator->errors()->firstOfAll()); // print_r($validator->errors('all')->firstOfAll()); -> This will result an exception } else { /** Validation passed */ echo "Validation successful!"; }
最后,您可以使用 validated() 函数获取已验证的输入。如果所有数据都已验证,则 validated() 函数将返回输入数组,如果没有验证数据,则返回空数组。
if ($validator->fails()) { /** Validation failed */ print_r($validator->errors()->firstOfAll()); // print_r($validator->errors('all')->firstOfAll()); -> This will result an exception } else { /** Validation passed */ echo "Validation successful!"; /** get validated */ $validated = $validator->validated(); print_r($validated); }
此外,如果您正在处理 WordPress 项目,您可以使用清理功能。有关清理功能的更多信息,请参阅此处。
验证规则
-
必需
检查给定数据是否为空。
$rules = [ 'input' => ['required'] ];
-
电子邮件
检查给定数据是否为有效的电子邮件地址,使用 PHP FILTER_VALIDATE_EMAIL
$rules = [ 'input' => ['email'] ];
-
URL
使用php FILTER_VALIDATE_URL 检查给定数据是否为有效的URL。
$rules = [ 'input' => ['url'] ];
-
数字
检查给定数据是否为数字。
$rules = [ 'input' => ['numeric'] ];
-
最大值
检查数组的最大元素或字符串的总字符数。数值将被视为字符串。使用 大于、大于等于 或 比较数字 验证数值。
$rules = [ 'input' => ['max:9'] ];
-
最小值
检查数组的最小元素或字符串的总字符数。数值将被视为字符串。使用 小于、小于等于 或 比较数字 验证数值。
$rules = [ 'input' => ['min:9'] ];
-
大于
检查值是否大于给定参数。值必须是数值。
$rules = [ 'input' => ['greater_than:9'] ];
或
$rules = [ 'input' => ['gt:9'] ];
-
大于等于
检查值是否大于或等于给定参数。值必须是数值。
$rules = [ 'input' => ['greater_than_equal:9'] ];
或
$rules = [ 'input' => ['gte:9'] ];
-
小于
检查值是否小于给定参数。值必须是数值。
$rules = [ 'input' => ['less_than:9'] ];
或
$rules = [ 'input' => ['lt:9'] ];
-
小于等于
检查值是否小于或等于给定参数。值必须是数值。
$rules = [ 'input' => ['less_than_equal:9'] ];
或
$rules = [ 'input' => ['lte:9'] ];
-
比较数字
通过比较与给定参数检查值。值必须是数值。
$rules = [ 'input' => ['compare_number:{operator},{parameter to compare}'] ];
示例
$rules = [ 'input' => ['compare_number:>,9'] ];
-
日期
检查值是否为日期,并且与参数格式相同。
$rules = [ 'input' => ['date:{date format}'] ];
示例
$rules = [ 'input' => ['date:Y-m-d H:i:s'] ];
-
日期大于
检查值是否为晚于给定参数的日期。参数可以是其他输入。
$rules = [ 'input' => ['date_more_than:{date or request field},{date format}'] ];
示例
$rules = [ 'input' => ['date_more_than:2024-12-01 01:59:59, Y-m-d H:i:s'] ];
或
$request = [ 'inputToCompare' => '2024-01-30', 'input' => '2024-12-31', ]; $rules = [ 'input' => ['date_more_than:inputToCompare, Y-m-d'] ];
-
日期小于
检查值是否为早于给定参数的日期。参数可以是其他输入。
$rules = [ 'input' => ['date_less_than:{date or request field},{date format}'] ];
示例
$rules = [ 'input' => ['date_less_than:2024-12-01 01:59:59,Y-m-d H:i:s'] ];
或
$request = [ 'inputToCompare' => '2024-01-30', 'input' => '2024-12-31', ]; $rules = [ 'input' => ['date_less_than:inputToCompare,Y-m-d'] ];
-
日期介于
检查值是否为介于给定参数之间的日期。参数可以是另一个请求输入。
$rules = [ 'input' => ['date_between:{start date or request field},{end date or request field},{date format}'] ];
示例
$rules = [ 'input' => ['date_between:2024-12-01 01:59:59,2024-12-31 01:59:59,Y-m-d H:i:s'] ];
或
$request = [ 'inputStart' => '2024-01-01', 'inputEnd' => '2024-01-30', 'input' => '2024-12-31', ]; $rules = [ 'input' => ['date_between:inputStart,inputEnd,Y-m-d'] ];
-
存在
-
不存在
-
匹配
检查值是否与给定参数匹配/完全相同。参数必须是另一个请求输入。
$rule = [ 'input' => ['match:{request field}']; ];
示例
$request = [ 'inputToCompare' => 'value to compare', 'input' => 'value input' ]; $rule = [ 'input' => ['match:inputToCompare']; ];
-
不匹配
检查值是否不匹配或不完全相同于给定参数。参数必须是另一个请求输入。
$rule = [ 'input' => ['not_match:{request field}']; ];
示例
$request = [ 'inputToCompare' => 'value to compare', 'input' => 'value input' ]; $rule = [ 'input' => ['not_match:inputToCompare']; ];
-
文件
检查值是否为文件输入。
$rule = [ 'input' => ['files']; ];
或
$rule = [ 'input' => ['file']; ];
或
$rule = [ 'input' => ['is_file']; ];
-
文件最大大小
检查输入文件大小不小于给定参数。
$rule = [ 'input' => ['max_file_size:{size in KB}']; ];
示例
$rule = [ 'input' => ['max_file_size:20']; ];
-
MIME
检查输入文件的MIME类型是否为给定参数之一。参数可以用逗号(“,”)分割为多个。
$rule = [ 'input' => ['mime:{mime type}']; ];
示例
$rule = [ 'input' => ['mime:image/png,image/jpeg,application/pdf']; ];
-
在
检查输入值是否为给定参数之一。参数可以用逗号(“,”)分割为多个。
$rule = [ 'input' => ['in:value1,value2']; ];
-
正则表达式
检查输入值是否匹配正则表达式模式。
$rule = [ 'input' => ['regex:^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+])(?=\S+$).*']; ];
清理
当前仅适用于WordPress项目,因此它使用WordPress的默认清理函数。用法
<?php require 'vendor/autoload.php'; use Wijoc\ValidifyMI\Validator; $input = [ 'email' => 'user@example.com', 'age' => 25, 'phoneNumber' => [ '123456789', '987654321' ], 'socialMedia' => [ 'facebook' => 'https://facebook.com', 'twitter' => 'https://twitter.com' ], 'address' => [ [ 'city' => 'Jakarta', 'province' => 'DKI Jakarta', 'postalCode' => '123' ] ] ]; $rules = [ 'email' => ['required', 'email'], 'age' => ['required', 'numeric'], 'phoneNumber' => ['min:1'], 'phoneNumber.*' => ['numeric'], 'socialMedia.facebook' => ['required'], 'address.*.postalCode' => ['required', 'numeric'], ]; $message = [ 'email.required' => "Email is required!", 'email.email' => "Email is invalid!", 'age.required' => "Age is required!", 'age.numeric' => "Age must be numeric!" ]; $sanitizer = [ 'email' => 'email' 'age' => 'text' 'phoneNumber.*' => 'text', 'socialMedia.facebook' => 'text', 'address.*.province' => 'kses' ]; /** Create validator * * You can add sanitizer as 4th arguments * * (for now it's limited to wordpress sanitize) */ $validator = Validator::make($input, $rules, $message, $sanitizer); if ($validator->fails()) { /** Validation failed */ print_r($validator->errors('all')); } else { /** get validated data */ $validated = $validator->validated(); /** get sanitized data */ $sanitized = $validator->sanitized(); }
此规则使用wordpress sanitize_email() 函数。
$sanitizer = [ 'input' => 'email' ];
此规则使用wordpress sanitize_textarea_field() 函数。
$sanitizer = [ 'input' => 'textarea' ];
此规则使用wordpress sanitize_text_field() 函数。
$sanitizer = [ 'input' => 'text' ];
此规则使用wordpress wp_kses() 函数。
$sanitizer = [ 'input' => 'kses' ];
此规则使用wordpress wp_kses_post() 函数。
$sanitizer = [ 'input' => 'ksespost' ];