RAKIT validation -PHP独立validation库
PHP独立库,用于验证数据。受Illuminate validation的启发。
特征
- API喜欢Laravel validation 。
- 数组validation 。
-
$_FILESvalidation具有多个文件支持。 - 自定义属性别名。
- 自定义validation消息。
- 自定义规则。
要求
- PHP 7.0或更高
- 安装作曲家
快速开始
安装
composer require "rakit/ validation "
用法
使用此库验证数据有两种方法。使用make制作validation对象,然后使用validate对其进行验证。或者只是使用validate 。示例:
使用make :
";
print_r($errors->firstOfAll());
echo "";
exit;
} else {
// validation passes
echo "Success!";
}
">
require ( ' vendor/autoload.php ' );
use Rakit validation Validator ;
$ validator = new Validator ;
// make it
$ validation = $ validator -> make ( $ _POST + $ _FILES , [
' name ' => ' required ' ,
' email ' => ' required|email ' ,
' password ' => ' required|min:6 ' ,
' confirm_password ' => ' required|same:password ' ,
' avatar ' => ' required|uploaded_file:0,500K,png,jpeg ' ,
' skills ' => ' array ' ,
' skills.*.id ' => ' required|numeric ' ,
' skills.*.percentage ' => ' required|numeric '
]);
// then validate
$ validation -> validate ();
if ( $ validation -> fails ()) {
// handling errors
$ errors = $ validation -> errors ();
echo " " ;
print_r ( $ errors -> firstOfAll ());
echo " " ;
exit ;
} else {
// validation passes
echo " Success! " ;
}
或只是validate它:
";
print_r($errors->firstOfAll());
echo "";
exit;
} else {
// validation passes
echo "Success!";
}
">
require ( ' vendor/autoload.php ' );
use Rakit validation Validator ;
$ validator = new Validator ;
$ validation = $ validator -> validate ( $ _POST + $ _FILES , [
' name ' => ' required ' ,
' email ' => ' required|email ' ,
' password ' => ' required|min:6 ' ,
' confirm_password ' => ' required|same:password ' ,
' avatar ' => ' required|uploaded_file:0,500K,png,jpeg ' ,
' skills ' => ' array ' ,
' skills.*.id ' => ' required|numeric ' ,
' skills.*.percentage ' => ' required|numeric '
]);
if ( $ validation -> fails ()) {
// handling errors
$ errors = $ validation -> errors ();
echo " " ;
print_r ( $ errors -> firstOfAll ());
echo " " ;
exit ;
} else {
// validation passes
echo " Success! " ;
}
在这种情况下,上面的两个示例将输出相同的结果。
但是使用make您可以在validation运行之前设置诸如自定义无效消息,自定义属性别名等之类的东西。
属性别名
默认情况下,我们将使您的属性转换为更可读的文本。例如,将显示为confirm_password Confirm password 。但是,您可以使用setAlias或setAliases方法将其设置为任何想要的东西。
例子:
$ validator = new Validator ;
// To set attribute alias, you should use `make` instead `validate`.
$ validation -> make ([
' province_id ' => $ _POST [ ' province_id ' ],
' district_id ' => $ _POST [ ' district_id ' ]
], [
' province_id ' => ' required|numeric ' ,
' district_id ' => ' required|numeric '
]);
// now you can set aliases using this way:
$ validation -> setAlias ( ' province_id ' , ' Province ' );
$ validation -> setAlias ( ' district_id ' , ' District ' );
// or this way:
$ validation -> setAliases ([
' province_id ' => ' Province ' ,
' district_id ' => ' District '
]);
// then validate it
$ validation -> validate ();
现在,如果province_id值为空,则错误消息将为“需要省”。
自定义validation消息
在注册/设置自定义消息之前,以下是您可以在自定义消息中使用的一些变量:
-
:attribute:将替换为属性别名。 -
:value:将替换为属性的弦乐值。对于数组和对象,将替换为JSON。
而且还有几个消息变量取决于其规则。
以下是注册/设置您的自定义消息的一些方法:
验证器的自定义消息
通过这种方式,每当您使用make或validate进行validation时,都会为其设置自定义消息。它对于本地化很有用。
为此,您可以将自定义消息设置为第一个参数构造函数:
$ validator = new Validator ([
' required ' => ' :attribute harus diisi ' ,
' email ' => ' :email tidak valid ' ,
// etc
]);
// then validation belows will use those custom messages
$ validation _a = $ validator -> validate ( $ dataset_a , $ rules_for_a );
$ validation _b = $ validator -> validate ( $ dataset_b , $ rules_for_b );
或使用这样的setMessages方法:
$ validator = new Validator ;
$ validator -> setMessages ([
' required ' => ' :attribute harus diisi ' ,
' email ' => ' :email tidak valid ' ,
// etc
]);
// now validation belows will use those custom messages
$ validation _a = $ validator -> validate ( $ dataset_a , $ rules_for_dataset_a );
$ validation _b = $ validator -> validate ( $ dataset_b , $ rules_for_dataset_b );
自定义消息validation
有时,您可能需要设置自定义消息以进行特定validation 。为此,您可以将自定义消息设置为$validator->make或$validator->validate的第三参数:
$ validator = new Validator ;
$ validation _a = $ validator -> validate ( $ dataset_a , $ rules_for_dataset_a , [
' required ' => ' :attribute harus diisi ' ,
' email ' => ' :email tidak valid ' ,
// etc
]);
或者,您可以使用$ validation ->setMessages这样:
$ validator = new Validator ;
$ validation _a = $ validator -> make ( $ dataset_a , $ rules_for_dataset_a );
$ validation _a -> setMessages ([
' required ' => ' :attribute harus diisi ' ,
' email ' => ' :email tidak valid ' ,
// etc
]);
. . .
$ validation _a -> validate ();
特定属性规则的自定义消息
有时,您可能需要为特定规则属性设置自定义消息。为此,您可以使用:作为消息分离器或使用链接方法。
示例:
$ validator = new Validator ;
$ validation _a = $ validator -> make ( $ dataset_a , [
' age ' => ' required|min:18 '
]);
$ validation _a -> setMessages ([
' age:min ' => ' 18+ only ' ,
]);
$ validation _a -> validate ();
或使用链接方法:
$ validator = new Validator ;
$ validation _a = $ validator -> make ( $ dataset_a , [
' photo ' => [
' required ' ,
$ validator ( ' uploaded_file ' )-> fileTypes ( ' jpeg|png ' )-> message ( ' Photo must be jpeg/png image ' )
]
]);
$ validation _a -> validate ();
翻译
自定义消息的翻译不同。当您使用自定义消息进行in , not_in , mimes和uploaded_file时,可能需要翻译。
例如,如果您使用in:1,2,3我们将设置无效消息,例如“属性仅允许'1','2'或'3'” where part'1'1','2'或'3'“”来自“:wasse_values”标签。因此,如果您有自定义的印尼消息“:属性Hanya Memperbolehkan:washe_values”,我们将设置无效的消息,例如“属性Hanya Memperbolehkan'1','2','2'或'3',这是“或“ Word”不是印尼语语言的一部分。
因此,要解决这个问题,我们可以使用这样的翻译:
// Set translation for words 'and' and 'or'.
$ validator -> setTranslations ([
' and ' => ' dan ' ,
' or ' => ' atau '
]);
// Set custom message for 'in' rule
$ validator -> setMessage ( ' in ' , " :attribute hanya memperbolehkan :allowed_values " );
// Validate
$ validation = $ validator -> validate ( $ inputs , [
' nomor ' => ' in:1,2,3 '
]);
$ message = $ validation -> errors ()-> first ( ' nomor ' ); // "Nomor hanya memperbolehkan '1', '2', atau '3'"
实际上,我们的内置规则仅使用单词“和“和”或“您可能需要翻译”。
处理错误消息
错误消息收集在Rakit validation ErrorBag对象中,您可以使用errors()方法将其获取。
$ validation = $ validator -> validate ( $ inputs , $ rules );
$ errors = $ validation -> errors (); // << ErrorBag
现在,您可以使用下面的方法检索错误消息:
all(string $format = ':message')
获取所有消息作为平坦的数组。
示例:
$ messages = $ errors -> all ();
// [
// 'Email is not valid email',
// 'Password minimum 6 character',
// 'Password must contains capital letters'
// ]
$ messages = $ errors -> all ( ' :message ' );
// [
// 'Email is not valid email ',
// 'Password minimum 6 character ',
// 'Password must contains capital letters '
// ] firstOfAll(string $format = ':message', bool $dotNotation = false)
从所有现有密钥中获取第一条消息。
示例:
$ messages = $ errors -> firstOfAll ();
// [
// 'email' => Email is not valid email',
// 'password' => 'Password minimum 6 character',
// ]
$ messages = $ errors -> firstOfAll ( ' :message ' );
// [
// 'email' => 'Email is not valid email ',
// 'password' => 'Password minimum 6 character ',
// ]参数$dotNotation用于数组validation 。如果是false ,它将返回原始数组结构,如果它是true它将返回带有DOT符号键的Flatten数组。
例如:
$ messages = $ errors -> firstOfAll ( ' :message ' , false );
// [
// 'contacts' => [
// 1 => [
// 'email' => 'Email is not valid email',
// 'phone' => 'Phone is not valid phone number'
// ],
// ],
// ]
$ messages = $ errors -> firstOfAll ( ' :message ' , true );
// [
// 'contacts.1.email' => 'Email is not valid email',
// 'contacts.1.phone' => 'Email is not valid phone number',
// ] first(string $key)
从给定密钥中获取第一条消息。如果键有任何错误消息,它将返回null ,或者如果键没有错误,则将返回string 。
例如:
if ( $ emailError = $ errors -> first ( ' email ' )) {
echo $ emailError ;
}toArray()
获取按密钥分组的所有消息。
例如:
$ messages = $ errors -> toArray ();
// [
// 'email' => [
// 'Email is not valid email'
// ],
// 'password' => [
// 'Password minimum 6 character',
// 'Password must contains capital letters'
// ]
// ] count()
获取计数消息。
has(string $key)
检查给定的键是否有错误。如果键有错误,则它将返回bool 。
得到验证,有效和无效数据
例如,您有这样的validation :
$ validation = $ validator -> validate ([
' title ' => ' Lorem Ipsum ' ,
' body ' => ' Lorem ipsum dolor sit amet ... ' ,
' published ' => null ,
' something ' => ' -invalid- '
], [
' title ' => ' required ' ,
' body ' => ' required ' ,
' published ' => ' default:1|required|in:0,1 ' ,
' something ' => ' required|numeric '
]);
您可以使用下面的示例中的方法获取经过验证的数据,有效数据或无效数据:
$ validatedData = $ validation -> getValidatedData ();
// [
// 'title' => 'Lorem Ipsum',
// 'body' => 'Lorem ipsum dolor sit amet ...',
// 'published' => '1' // notice this
// 'something' => '-invalid-'
// ]
$ validData = $ validation -> getValidData ();
// [
// 'title' => 'Lorem Ipsum',
// 'body' => 'Lorem ipsum dolor sit amet ...',
// 'published' => '1'
// ]
$ invalidData = $ validation -> getInvalidData ();
// [
// 'something' => '-invalid-'
// ]
可用规则
单击以显示详细信息。
必需的
此validation下的字段必须存在,而不是“空”。
这里有一些例子:
| 价值 | 有效的 |
|---|---|
'something' |
真的 |
'0' |
真的 |
0 |
真的 |
[0] |
真的 |
[null] |
真的 |
| 无效的 | 错误的 |
| [] | 错误的 |
| '' | 错误的 |
对于上传文件, $_FILES['key']['error']不得UPLOAD_ERR_NO_FILE 。
必需_if :另一_FIELD,value_1,value_2,...
如果另一个字段等于任何值,则必须存在此规则下的字段,而不是空的。
例如,如果something是1 , '1' , 'yes'或'on'的值之一,则需要required_if:something,1,yes,on 。
必需_unles :entere_field,value_1,value_2,...
除非另一个字段等于任何值,否则必须存在validation的字段,而不是空的。
必需_with :field_1,field_2,...
validation中的字段必须存在,并且仅在存在任何其他指定字段时才为空。
必需_WITHOUT :field_1,field_2,...
validation中的字段必须存在,并且仅在不存在其他指定字段时才空为空。
必需_WITH_ALL :field_1,field_2,...
仅在存在所有其他指定字段时,必须存在validation的字段,并且不仅为空。
必需_without_all :field_1,field_2,...
validation中的字段必须存在,并且仅在不存在所有其他指定字段时才空为空。
uploaded_file :min_size,max_size,extension_a,extension_b,...
此规则将从$_FILES验证数据。此规则下的字段必须以下规则以下规则有效:
-
$_FILES['key']['error']必须是UPLOAD_ERR_OK或UPLOAD_ERR_NO_FILE。对于UPLOAD_ERR_NO_FILE您可以使用required规则进行验证。 - 如果给出最小的大小,上传的文件大小不得低于最小尺寸。
- 如果给出最大大小,上传的文件大小不得高于最大大小。
- 如果给出文件类型,则MIME类型必须是这些给定类型的一种。
以下是一些示例定义和解释:
-
uploaded_file:上传文件是可选的。当它不是空的时,必须是ERR_UPLOAD_OK。 -
required|uploaded_file:需要上传文件,并且必须是ERR_UPLOAD_OK。 -
uploaded_file:0,1M:上传的文件大小必须在0-1 MB之间,但是上传的文件是可选的。 -
required|uploaded_file:0,1M,png,jpeg:上传文件大小必须在0-1MB之间,MIME类型必须为image/jpeg或image/png。
如果您想在大小和类型validation之间有单独的错误消息,请选择。您可以使用mimes规则来验证文件类型,以及min , max或between最小规则来验证其大小。
对于多个文件上传,PHP将为您提供不良的数组$_FILES结构(这是主题)。因此,我们组成uploaded_file规则,以自动解决您的$_FILES值,以成为组织良好的数组结构。这意味着,您不仅可以mimes min , max ,或between规则来验证多个文件上传。您应该将uploaded_file仅仅为了解决其值,并确保该值是正确的上传文件值。
例如,如果您有这样的输入文件:
< input type =" file " name =" photos[] " />
< input type =" file " name =" photos[] " />
< input type =" file " name =" photos[] " />您可以像这样验证它:
$ validation = $ validator -> validate ( $ _FILES , [
' photos.* ' => ' uploaded_file:0,2M,jpeg,png '
]);
// or
$ validation = $ validator -> validate ( $ _FILES , [
' photos.* ' => ' uploaded_file|max:2M|mimes:jpeg,png '
]);
或者,如果您有这样的输入文件:
< input type =" file " name =" images[profile] " />
< input type =" file " name =" images[cover] " />您可以这样验证它:
$ validation = $ validator -> validate ( $ _FILES , [
' images.* ' => ' uploaded_file|max:2M|mimes:jpeg,png ' ,
]);
// or
$ validation = $ validator -> validate ( $ _FILES , [
' images.profile ' => ' uploaded_file|max:2M|mimes:jpeg,png ' ,
' images.cover ' => ' uploaded_file|max:5M|mimes:jpeg,png ' ,
]);
现在,当您使用getValidData()或getInvalidData()时,您将获得良好的数组结构,就像单个文件上传一样。
哑剧:Extension_a,Extension_B,...
validation下的$_FILES项目必须具有与列出的扩展名之一相对应的MIME类型。
默认/默认值
这是没有验证任何东西的特殊规则。如果该属性为空或不存在,它只是将默认值设置为属性。
例如,如果您有这样的validation
$ validation = $ validator -> validate ([
' enabled ' => null
], [
' enabled ' => ' default:1|required|in:0,1 '
'published' => ' default : 0 |required|in: 0 , 1 '
]);
$ validation -> passes (); // true
// Get the valid/default data
$ valid_data = $ validation -> getValidData ();
$ enabled = $ valid_data [ ' enabled ' ];
$ published = $ valid_data [ ' published ' ];
validation通过,因为我们为enabled并published到1和0默认值,该值有效。然后,我们可以获取有效/默认数据。
电子邮件
此validation下的字段必须是有效的电子邮件地址。
大写
此validation下的字段必须是有效的大写。
小写
此validation下的字段必须有效小写。
JSON
此validation下的字段必须是有效的JSON字符串。
阿尔法
此规则下的字段必须完全是字母字符。
数字
此规则下的字段必须是数字。
alpha_num
此规则下的字段必须完全是alpha数字字符。
alpha_dash
该规则下的字段可能具有α数字字符,破折号和下划线。
alpha_spaces
此规则下的字段可能具有alpha字符以及空格。
在:value_1,value_2,...
此规则下的字段必须包含在给定值列表中。
该规则使用in_array检查值。默认情况下, in_array禁用严格检查。因此,它没有检查数据类型。如果要启用严格的检查,可以这样调用验证器:
$ validation = $ validator -> validate ( $ data , [
' enabled ' => [
' required ' ,
$ validator ( ' in ' , [ true , 1 ])-> strict ()
]
]);
然后,“启用”值应为boolean true ,或int 1 。
not_in :value_1,value_2,...
此规则下的字段不得包含在给定值列表中。
此规则也使用in_array 。您可以通过调用验证器来启用严格的检查,并在上面in规则中调用strict()之类的示例。
最小值:数字
此规则下的字段必须大大或等于给定的数字。
对于字符串值,大小对应于字符的数量。对于整数或浮点值,大小对应于其数值值。对于数组,大小对应于数组的计数。如果您的值是数字字符串,则可以将numeric规则列为数字值而不是字符数量。
您还可以使用此规则验证上传文件,以验证上传文件的最小大小。例如:
$ validation = $ validator -> validate ([
' photo ' => $ _FILES [ ' photo ' ]
], [
' photo ' => ' required|min:1M '
]);
最大:数字
此规则下的字段必须比给定数字低或等于给定的数字。价值大小以类似于min规则的方式计算。
您还可以使用此规则验证上传文件,以验证上传文件的最大大小。例如:
$ validation = $ validator -> validate ([
' photo ' => $ _FILES [ ' photo ' ]
], [
' photo ' => ' required|max:2M '
]);
之间:最大,最大
此规则下的字段必须具有最小值和最大参数之间的大小。价值大小以相同的方式计算,例如min和max规则。
您还可以使用此规则验证上传文件以验证上传文件的大小。例如:
$ validation = $ validator -> validate ([
' photo ' => $ _FILES [ ' photo ' ]
], [
' photo ' => ' required|between:1M,2M '
]);
数字:价值
validation下的字段必须是数字,并且必须具有确切的value长度。
digits_between :min,max
validation下的字段必须具有给定min和max之间的长度。
URL
此规则下的字段必须是有效的URL格式。默认情况下,它像any_scheme://...一样,检查通用URL方案格式。但是,您可以根据需要指定URL方案。
例如:
$ validation = $ validator -> validate ( $ inputs , [
' random_url ' => ' url ' , // value can be `any_scheme://...`
' https_url ' => ' url:http ' , // value must be started with `https://***`
' http_url ' => ' url:http,https ' , // value must be started with `http://***` or `https://***`
' ftp_url ' => ' url:ftp ' , // value must be started with `ftp://`
' custom_url ' => ' url:custom ' , // value must be started with `custom://`
' mailto_url ' => ' url:mailto ' , // value must conatin valid mailto URL scheme like `mailto:a@mail.com,b@mail.com`
' jdbc_url ' => ' url:jdbc ' , // value must contain valid jdbc URL scheme like `jdbc:mysql://localhost/dbname`
]);
对于常见的URL方案和MailTo,我们将
FILTER_VALIDATE_URL组合以验证URL格式和preg_match以验证其方案。除JDBC URL外,目前仅检查有效的JDBC方案。
整数
t规则下的字段必须是整数。布尔
该规则下的领域必须是布尔值。接受的输入是true
通过命令行克隆项目: