# PHP Rakit 验证教程

> 原文： [https://zetcode.com/php/rakitvalidation/](https://zetcode.com/php/rakitvalidation/)

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

## Rakit 验证

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

## 安装

```php
$ composer require rakit/validation
$ composer require tightenco/collect

```

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

## 简单的例子

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

`simple.php`

```php
<?php

require('vendor/autoload.php');

use Rakit\Validation\Validator;

$validator = new Validator;

$vals = ['name' => ''];
$rules = ['name' => 'required'];

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

$validation->validate();

if ($validation->fails()) {

    $coll = collect($validation->errors());

    $messages = $coll->flatten();

    foreach ($messages as $message) {
        echo $message . "\n";
    }
} else {

    echo "Validation passed";
}

```

该示例验证一个必需值。

```php
use Rakit\Validation\Validator;

```

我们包括验证器。

```php
$validator = new Validator;

```

我们创建`Validator`的实例。

```php
$vals = ['name' => ''];
$rules = ['name' => 'required'];

```

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

```php
$validation = $validator->make($vals, $rules);

```

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

```php
$validation->validate();

```

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

```php
if ($validation->fails()) {

```

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

```php
$coll = collect($validation->errors());

$messages = $coll->flatten();

foreach ($messages as $message) {
    echo $message . "\n";
}

```

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

```php
$ php simple.php
The Name is required

```

这是输出。

## 验证规则

Rakit 验证包含一组预定义规则，例如`required`，`email`，`min`，`max`或`url`。

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

`rules.php`

```php
<?php

require 'vendor/autoload.php';

use Rakit\Validation\Validator;

$validator = new Validator;

$vals = ['name' => 'John Doe', 'email' => 'johndoe#gmail.com', 
    'password' => '12345', 'confirm_password' => '23456'];

$rules = ['name' => 'required',
    'email' => 'required|email',
    'password' => 'required|min:6',
    'confirm_password' => 'required|same:password'];

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

$validation->validate();

if ($validation->fails()) {

    $coll = collect($validation->errors());

    $messages = $coll->flatten();

    foreach ($messages as $message) {
        echo $message . "\n";
    }
} else {

    echo "Validation passed";
}

```

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

```php
$rules = ['name' => 'required',
    'email' => 'required|email',
    'password' => 'required|min:6',
    'confirm_password' => 'required|same:password'];

```

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

```php
$ php rules.php
The Email is not valid email
The Password minimum is 6
The Confirm password must be same with password

```

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

## 验证日期

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

`dates.php`

```php
<?php

require('vendor/autoload.php');

use Rakit\Validation\Validator;

$validator = new Validator;

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

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

$validation->validate();

if ($validation->fails()) {

    $coll = collect($validation->errors());

    $messages = $coll->flatten();

    foreach ($messages as $message) {
        echo $message . "\n";
    }
} else {

    echo "Validation passed";
}

```

该示例验证两个日期。

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

```

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

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

```

This is the output.

## 自定义消息

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

`custom_message.php`

```php
<?php

require('vendor/autoload.php');

use Rakit\Validation\Validator;

$validator = new Validator;

$vals = ['name' => ''];
$rules = ['name' => 'required'];
$msgs = ['name' => 'The name is compulsory']; 

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

$validation->validate();

if ($validation->fails()) {

    $coll = collect($validation->errors());

    $messages = $coll->flatten();

    foreach ($messages as $message) {
        echo $message . "\n";
    }
} else {

    echo "Validation passed";
}

```

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

```php
$msgs = ['name' => 'The name is compulsory']; 

```

这是我们的自定义消息。

```php
$validation = $validator->make($vals, $rules, $msgs);

```

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

```php
$ php custom_message.php
The name is compulsory

```

This is the output.

## 验证 GET 数据

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

`get_data.php`

```php
<?php

require('vendor/autoload.php');

use Rakit\Validation\Validator;

$validator = new Validator;

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

$validation->validate();

if ($validation->fails()) {

    $coll = collect($validation->errors());

    $messages = $coll->flatten();

    foreach ($messages as $message) {
        echo $message . "\n";
    }
} else {

    echo "Validation passed";
}

```

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

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

```

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

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

```

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

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

```

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

您可能也对以下相关教程感兴趣： [PHP Respect 验证教程](/php/respectvalidation/)， [Valitron 教程](/php/valitron/)， [PHP PDO 教程](/php/pdo/)， [PHP 文件系统函数](/articles/phpfilesystemfunctions/) ， [PHP 教程](/lang/php/)。

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