{% raw %}
PHP Respect 验证教程
PHP Respect 验证教程展示了如何使用 Respect 验证包来验证 PHP 值。
Respect 验证
Respect 验证是一个 PHP 独立验证库。
安装
$ composer require respect/validation$ composer require tightenco/collect
我们安装了 Respect 验证包和 Laravel 的集合包。
Respect 验证简单示例
在第一个示例中,我们展示了如何进行非常简单的验证。
simple.php
<?phprequire('vendor/autoload.php');use Respect\Validation\Validator as v;$name = "John Doe";$r = v::alnum()->validate($name);if ($r) {echo "Validation passed";} else {echo "Validation failed";}
该示例验证一个值。
use Respect\Validation\Validator as v;
我们包括验证器。
$r = v::alnum()->validate($name);
alnum是一个允许字母数字值的验证规则。 它还允许有空间。 validate()方法将验证规则,并返回指示失败或成功的布尔值。
if ($r) {echo "Validation passed";} else {echo "Validation failed";}
基于返回的值,我们显示验证消息。
$ php simple.phpValidation passed
这是输出。
新增字符
我们可以在规则中添加一个字符。
add_character.php
<?phprequire('vendor/autoload.php');use Respect\Validation\Validator as v;$name = "Vane-Tempest-Stewart";$r = v::alnum('-')->validate($name);if ($r) {echo "Validation passed";} else {echo "Validation failed";}
在示例中,我们在alnum规则中添加了破折号。
$name = "Vane-Tempest-Stewart";
一些名称可能包含破折号。
$r = v::alnum('-')->validate($name);
我们在alnum规则中添加破折号。
Respect 验证链接规则
规则可以链接在一起。
chaining.php
<?phprequire('vendor/autoload.php');use Respect\Validation\Validator as v;$name = "John";$r = v::alnum()->length(4, null)->validate($name);if ($r) {echo "Validation passed";} else {echo "Validation failed";}
在示例中,我们有两个规则:alnum和length。
$r = v::alnum()->length(4, null)->validate($name);
该名称只能包含字母数字字符,并且必须至少包含四个字符。
Respect 验证合并规则
规则的组合类似于链接技术。 Rules\AllOf用于组合多个规则。
combine_rules.php
<?phprequire('vendor/autoload.php');use Respect\Validation\Validator as v;use Respect\Validation\Rules;$name = "John";$nameValidator = new Rules\AllOf(new Rules\Alnum(),new Rules\Length(5, 40));$r = $nameValidator->validate($name);if ($r) {echo "Validation passed";} else {echo "Validation failed";}
该示例将两个验证规则与Rules\AllOf结合在一起。
Respect 验证断言函数
validate()方法返回一个布尔值。 assert()方法返回完整的验证报告。
assert_fun.php
<?phprequire('vendor/autoload.php');use Respect\Validation\Validator as v;use Respect\Validation\Exceptions\NestedValidationException;$name = "";$validator = v::alnum()->notempty();try {$validator->assert($name);} catch(NestedValidationException $ex) {$coll = collect($ex->getMessages());$messages = $coll->flatten();foreach ($messages as $message) {echo $message . "\n";}}
该示例对验证规则使用assert()方法,并显示错误消息。
$validator->assert($name);
我们使用assert()验证名称值。
$coll = collect($ex->getMessages());$messages = $coll->flatten();foreach ($messages as $message) {echo $message . "\n";}
借助 Laravel 的集合,我们显示了错误消息。
$ php assert_fun.php"" must contain only letters (a-z) and digits (0-9)"" must not be empty
This is the output.
Respect 验证范围
between规则验证范围,包括整数,字符和日期。
between_rule.php
<?phprequire('vendor/autoload.php');use Respect\Validation\Validator as v;$age = 34;$r = v::intVal()->between(18, 99)->validate($age);if ($r) {echo "Age validation passed\n";} else {echo "Age validation failed\n";}$char = 'g';$r = v::stringType()->between('a', 'c')->validate($char);if ($r) {echo "Letter validation passed\n";} else {echo "Letter validation failed\n";}$myDate = '2013-01-01';$r = v::date()->between('2009-01-01', '2019-01-01')->validate($myDate);if ($r) {echo "Date validation passed\n";} else {echo "Date validation failed\n";}
该示例使用between规则。
$r = v::intVal()->between(18, 99)->validate($age);
此规则检查$age变量是否在 18 到 99 之间。
$r = v::stringType()->between('a', 'c')->validate($char);
此规则检查$char变量是否在’a’和’c’字符之间。
$r = v::date()->between('2009-01-01', '2019-01-01')->validate($myDate);
该规则检查$myDate变量是否在两个指定的日期之间。
Respect 验证对象
对象属性使用attribute()进行验证。
user.php
<?phpclass User {private $name;private $email;public function getName() : string {return $this->name;}public function setName($name) : void {$this->name = $name;}public function getEmail() : string {return $this->email;}public function setEmail($email) : void {$this->email = $email;}}
这是user.php。
validate_object.php
<?phprequire('vendor/autoload.php');require_once('user.php');use Respect\Validation\Validator as v;use Respect\Validation\Exceptions\NestedValidationException;$user = new User();$user->setName('Jo');$user->setEmail('johndoe#gmail.com');$userValidator = v::attribute('name', v::alnum()->length(4, null))->attribute('email', v::email());try {$userValidator->assert($user);} catch(NestedValidationException $ex) {$coll = collect($ex->getMessages());$messages = $coll->flatten();foreach ($messages as $message) {echo $message . "\n";}}
该示例验证User类的属性。
$userValidator = v::attribute('name', v::alnum()->length(4, null))->attribute('email', v::email());
这些是用户对象属性的规则。
$ php validate_object.phpname must have a length greater than 4email must be valid email
This is the output.
自定义消息
我们可以提供自定义验证消息。
custom_message.php
<?phprequire('vendor/autoload.php');use Respect\Validation\Validator as v;use Respect\Validation\Exceptions\NestedValidationException;$name = "";$validator = v::alnum()->notEmpty()->setName('name');try {$validator->assert($name);} catch(NestedValidationException $ex) {$errors = $ex->findMessages(['alnum' => '{{name}} must contain only letters and digits','notEmpty' => '{{name}} must not be empty']);$coll = collect($errors);$messages = $coll->flatten();foreach ($messages as $message) {echo $message . "\n";}}
该示例添加了两个自定义消息。
$validator = v::alnum()->notEmpty()->setName('name');
使用setName()方法,我们为模板占位符设置了一个值。
$errors = $ex->findMessages(['alnum' => '{{name}} must contain only letters and digits','notEmpty' => '{{name}} must not be empty']);
在这里,我们提供自定义错误消息。
$ php custom_message.phpname must contain only letters and digitsname must not be empty
This is the output.
您可能也对以下相关教程感兴趣: PHP Rakit 验证教程, Valitron 教程, PHP PDO 教程, Twig 教程, PHP 文件系统函数, PHP 教程。
在本教程中,我们使用了 PHP Respect 验证库来验证值。
{% endraw %}
