原文: https://zetcode.com/php/rakitvalidation/

PHP Rakit 验证教程展示了如何使用 Rakit 验证包来验证 PHP 值。

Rakit 验证

Rakit 验证是一个 PHP 独立验证库。 它是受 Laravel 的Illuminate\Validation启发的。

安装

  1. $ composer require rakit/validation
  2. $ composer require tightenco/collect

我们安装了 Rakit 验证包和 Laravel 的集合包。

简单的例子

在第一个示例中,我们展示了如何进行非常简单的验证。

simple.php

  1. <?php
  2. require('vendor/autoload.php');
  3. use Rakit\Validation\Validator;
  4. $validator = new Validator;
  5. $vals = ['name' => ''];
  6. $rules = ['name' => 'required'];
  7. $validation = $validator->make($vals, $rules);
  8. $validation->validate();
  9. if ($validation->fails()) {
  10. $coll = collect($validation->errors());
  11. $messages = $coll->flatten();
  12. foreach ($messages as $message) {
  13. echo $message . "\n";
  14. }
  15. } else {
  16. echo "Validation passed";
  17. }

该示例验证一个必需值。

  1. use Rakit\Validation\Validator;

我们包括验证器。

  1. $validator = new Validator;

我们创建Validator的实例。

  1. $vals = ['name' => ''];
  2. $rules = ['name' => 'required'];

$vals包含要验证的值。 $rules包含验证规则。 在我们的情况下,需要name值。

  1. $validation = $validator->make($vals, $rules);

使用make()方法,我们准备验证; 我们通过值和规则。

  1. $validation->validate();

我们使用validate()进行验证。

  1. if ($validation->fails()) {

使用fails(),我们检查验证是否失败。

  1. $coll = collect($validation->errors());
  2. $messages = $coll->flatten();
  3. foreach ($messages as $message) {
  4. echo $message . "\n";
  5. }

我们使用 Laravel 的集合来分析错误。

  1. $ php simple.php
  2. The Name is required

这是输出。

验证规则

Rakit 验证包含一组预定义规则,例如requiredemailminmaxurl

规则可以与|字符结合使用。

rules.php

  1. <?php
  2. require 'vendor/autoload.php';
  3. use Rakit\Validation\Validator;
  4. $validator = new Validator;
  5. $vals = ['name' => 'John Doe', 'email' => 'johndoe#gmail.com',
  6. 'password' => '12345', 'confirm_password' => '23456'];
  7. $rules = ['name' => 'required',
  8. 'email' => 'required|email',
  9. 'password' => 'required|min:6',
  10. 'confirm_password' => 'required|same:password'];
  11. $validation = $validator->make($vals, $rules);
  12. $validation->validate();
  13. if ($validation->fails()) {
  14. $coll = collect($validation->errors());
  15. $messages = $coll->flatten();
  16. foreach ($messages as $message) {
  17. echo $message . "\n";
  18. }
  19. } else {
  20. echo "Validation passed";
  21. }

该示例使用了多个验证规则。

  1. $rules = ['name' => 'required',
  2. 'email' => 'required|email',
  3. 'password' => 'required|min:6',
  4. 'confirm_password' => 'required|same:password'];

我们有四个验证规则。 必须输入email,必须是有效的电子邮件地址。 password是必需的,并且必须至少包含六个字符。 confirm_password必须与password相同。

  1. $ php rules.php
  2. The Email is not valid email
  3. The Password minimum is 6
  4. The Confirm password must be same with password

该示例以三个验证失败结束。

验证日期

下一个示例显示如何验证日期。

dates.php

  1. <?php
  2. require('vendor/autoload.php');
  3. use Rakit\Validation\Validator;
  4. $validator = new Validator;
  5. $vals = ['born' => '2000-03-30', 'meetingDate' => '2010-12-31'];
  6. $rules = ['born' => 'before:2018-12-31', 'meetingDate' => 'after:2019-02-02'];
  7. $validation = $validator->make($vals, $rules);
  8. $validation->validate();
  9. if ($validation->fails()) {
  10. $coll = collect($validation->errors());
  11. $messages = $coll->flatten();
  12. foreach ($messages as $message) {
  13. echo $message . "\n";
  14. }
  15. } else {
  16. echo "Validation passed";
  17. }

该示例验证两个日期。

  1. $vals = ['born' => '2000-03-30', 'meetingDate' => '2010-12-31'];
  2. $rules = ['born' => 'before:2018-12-31', 'meetingDate' => 'after:2019-02-02'];

使用before规则,我们验证给定的日期在某个日期之前,并且使用after规则,我们验证给定的日期在某个日期之后。

  1. $ php dates.php
  2. The MeetingDate must be a date after 2019-02-02.

This is the output.

自定义消息

我们可以提供自定义验证消息。 消息作为第三个参数传递给make()方法。

custom_message.php

  1. <?php
  2. require('vendor/autoload.php');
  3. use Rakit\Validation\Validator;
  4. $validator = new Validator;
  5. $vals = ['name' => ''];
  6. $rules = ['name' => 'required'];
  7. $msgs = ['name' => 'The name is compulsory'];
  8. $validation = $validator->make($vals, $rules, $msgs);
  9. $validation->validate();
  10. if ($validation->fails()) {
  11. $coll = collect($validation->errors());
  12. $messages = $coll->flatten();
  13. foreach ($messages as $message) {
  14. echo $message . "\n";
  15. }
  16. } else {
  17. echo "Validation passed";
  18. }

该示例添加了一条自定义消息。

  1. $msgs = ['name' => 'The name is compulsory'];

这是我们的自定义消息。

  1. $validation = $validator->make($vals, $rules, $msgs);

消息将传递到make()方法。

  1. $ php custom_message.php
  2. The name is compulsory

This is the output.

验证 GET 数据

在以下示例中,我们验证 GET 数据。

get_data.php

  1. <?php
  2. require('vendor/autoload.php');
  3. use Rakit\Validation\Validator;
  4. $validator = new Validator;
  5. $rules = ['name' => 'required', 'email' => 'required|email'];
  6. $validation = $validator->make($_GET, $rules);
  7. $validation->validate();
  8. if ($validation->fails()) {
  9. $coll = collect($validation->errors());
  10. $messages = $coll->flatten();
  11. foreach ($messages as $message) {
  12. echo $message . "\n";
  13. }
  14. } else {
  15. echo "Validation passed";
  16. }

该示例验证来自 GET 请求的名称和电子邮件参数。

  1. $rules = ['name' => 'required', 'email' => 'required|email'];
  2. $validation = $validator->make($_GET, $rules);

make()方法将全局$_GET变量作为第一个参数。

  1. $ php -S localhost:8000
  2. PHP 7.2.11 Development Server started at Sat Feb 2 21:22:23 2019
  3. Listening on http://localhost:8000
  4. Document root is C:\Users\Jano\Documents\php-progs\rakit-val
  5. Press Ctrl-C to quit.

我们启动内置的 Web 服务器。

  1. $ curl "localhost:8000/get_data.php?name=John%20Doe&email=john.doe#gmail.com"
  2. The Email is not valid email

我们使用curl工具创建带有两个参数的 GET 请求。

您可能也对以下相关教程感兴趣: PHP Respect 验证教程Valitron 教程PHP PDO 教程PHP 文件系统函数PHP 教程

在本教程中,我们使用 Rakit 验证来验证 PHP 值。