Valitron
最后修改于 2025 年 2 月 16 日
PHP Valitron 教程演示了如何使用 Valitron 验证包来验证 PHP 值。
Valitron
Valitron 是一个简单、极简且优雅的独立验证库,没有任何依赖关系。
安装
$ composer require vlucas/valitron $ composer require tightenco/collect
我们安装 Valitron 包和 Laravel 的集合包。
简单示例
在第一个例子中,我们展示了如何进行一个非常简单的验证。
<?php
require('vendor/autoload.php');
use Valitron\Validator;
$validator = new Validator(['name' => 'John Doe']);
$validator->rule('required', 'name');
if($validator->validate()) {
echo "Validation passed";
} else {
$coll = collect($validator->errors());
$messages = $coll->flatten();
foreach ($messages as $message) {
echo $message . "\n";
}
}
该示例验证一个必需值。
use Valitron\Validator;
我们包含验证器。
$validator = new Validator(['name' => 'John Doe']);
我们创建 Validator 的实例,并向其传递要验证的值。
$validator->rule('required', 'name');
我们使用 rule 方法指定一个 required 规则。
if($validator->validate()) {
验证通过 validate 执行。
$coll = collect($validator->errors());
$messages = $coll->flatten();
foreach ($messages as $message) {
echo $message . "\n";
}
如果验证失败,我们会获取错误并显示它们。
$ php simple.php Validation passed
验证规则
Valitron 包含一组预定义的规则,例如 required、email、min、max 或 url。
这些规则可以使用 | 字符组合。
<?php
require('vendor/autoload.php');
use Valitron\Validator;
$rules = [
'required' => ['name', 'email'],
'alphaNum' => 'name',
'integer' => 'age',
'min' => [['age', 1]],
'email' => 'email'
];
$validator = new Validator(['name' => 'John Doe', 'age' => 34]);
$validator->rules($rules);
if ($validator->validate()) {
echo "Validation passed";
} else {
$errors = $validator->errors();
foreach ($errors as $arr) {
foreach ($arr as $error) {
echo $error . "\n";
}
};
}
该示例使用了几个验证规则。
$rules = [
'required' => ['name', 'email'],
'alphaNum' => 'name',
'integer' => 'age',
'min' => [['age', 1]],
'email' => 'email'
];
我们有四个验证规则。 name 和 email 是必需的。 name 必须是字母数字值,age 必须是整数,其最小值是 1。最后,email 必须是有效的电子邮件地址。
$ php multiple_rules.php Email is required Email is not a valid email address Name must contain only letters a-z and/or numbers 0-9
该示例以三个验证失败结束。
Valitron 链式规则
可以通过链式调用 rule 方法来添加规则。
<?php
require('vendor/autoload.php');
use Valitron\Validator;
$validator = new Validator(['name' => 'John Doe', 'email' => 'johndoe#gmail.com']);
$validator->rule('required', 'name')->rule('email', 'email');
if($validator->validate()) {
echo "Validation passed";
} else {
$coll = collect($validator->errors());
$messages = $coll->flatten();
foreach ($messages as $message) {
echo $message . "\n";
}
}
该示例链式调用了两个规则。
$validator->rule('required', 'name')->rule('email', 'email');
我们通过链式调用 rule 方法添加了两个验证规则。
验证日期
有四个用于日期的验证规则:date、dateFormat、dateBefore 和 dateAfter。
<?php
require('vendor/autoload.php');
use Valitron\Validator;
$validator = new Validator(['created_at' => '2019-03-01']);
$validator->rule('dateBefore', 'created_at', '2018-10-13');
if ($validator->validate()) {
echo "Validation passed";
} else {
$coll = collect($validator->errors());
$messages = $coll->flatten();
foreach ($messages as $message) {
echo $message . "\n";
}
}
该示例使用 dateBefore 规则验证两个日期。
$validator = new Validator(['created_at' => '2019-03-01']);
$validator->rule('dateBefore', 'created_at', '2018-10-13');
使用 dateBefore 规则,我们验证给定日期是否早于某个其他日期。
$ php date_before.php Created At must be date before '2018-10-13'
验证 IP 地址
IP 地址使用 ip 规则进行验证。
<?php
require 'vendor/autoload.php';
use Valitron\Validator;
$vals = ['ip1' => '127.0.0.1', 'ip2' => 'FE80:0000:0000:0000:0202:B3FF:FE1E:8329',
'ip3' => 'FE80::0202:B3FF:FE1E:8329', 'ip4' => '0.0.1'];
$coll = collect($vals);
$coll->each(function ($value, $key) {
$validator = new Validator([$key => $value]);
$validator->rule('ip', $key);
if ($validator->validate()) {
echo "Validation passed for $key with $value" . "\n";
} else {
$errs = collect($validator->errors());
$messages = $errs->flatten();
foreach ($messages as $message) {
echo $message . "\n";
}
}
});
该示例验证 IP v4 和 IP v6 地址。
$ php ipaddress.php Validation passed for ip1 with 127.0.0.1 Validation passed for ip2 with FE80:0000:0000:0000:0202:B3FF:FE1E:8329 Validation passed for ip3 with FE80::0202:B3FF:FE1E:8329 Ip4 is not a valid IP address
自定义消息
我们可以提供自定义的验证消息。 这些消息通过 message 传递。
<?php
require('vendor/autoload.php');
use Valitron\Validator;
$validator = new Validator(['name' => '']);
$validator->rule('required', 'name')->message('{field} is compulsory')->label("name");
$validator->rule('lengthMin', 'name', 2)->message('{field} must have at least 2 characters')
->label("name");
if($validator->validate()) {
echo "Validation passed";
} else {
$coll = collect($validator->errors());
$messages = $coll->flatten();
foreach ($messages as $message) {
echo $message . "\n";
}
}
该示例添加了自定义消息。
$validator->rule('required', 'name')->message('{field} is compulsory')->label("name");
使用链式方法调用,我们添加了自定义验证消息。
$ php custom_message.php name is compulsory name must have at least 2 characters
验证值的子集
值的子集使用 subset 规则进行验证。
<?php
require('vendor/autoload.php');
use Valitron\Validator;
$vals = ['colors' => ['green', 'blue', 'black']];
$validator = new Validator($vals);
$validator->rule('subset', 'colors', ['red', 'green', 'blue', 'orange', 'yellow']);
if ($validator->validate()) {
echo "Validation passed";
} else {
$coll = collect($validator->errors());
$messages = $coll->flatten();
foreach ($messages as $message) {
echo $message . "\n";
}
}
该示例检查 $vals 变量是否包含来自已定义颜色值子集的颜色。
验证 GET 数据
在下面的示例中,我们验证 GET 数据。
<?php
require('vendor/autoload.php');
use Valitron\Validator;
$validator = new Validator($_GET);
$validator->rule('required', ['name', 'email']);
$validator->rule('email', 'email');
if ($validator->validate()) {
echo "Validation passed";
} else {
$coll = collect($validator->errors());
$messages = $coll->flatten();
foreach ($messages as $message) {
echo $message . "\n";
}
}
该示例验证来自 GET 请求的 name 和 email 参数。
$validator = new Validator($_GET);
全局 $_GET 变量被传递给 Validator。
$ php -S localhost:8000 PHP 7.2.11 Development Server started at Sat Feb 23 17:24:05 2019 Listening on https://:8000 Document root is C:\Users\Jano\Documents\php-progs\valitron Press Ctrl-C to quit.
我们启动内置的 Web 服务器。
$ curl "localhost:8000/get_data.php?name=John%20Doe&email=john.doe#gmail.com" Email is not a valid email address
我们使用 curl 工具创建了一个带有两个参数的 GET 请求。
来源
在本文中,我们使用 Valitron 来验证 PHP 值。
作者
列出所有 PHP 教程。