ZetCode

PHP Rakit 验证

最后修改于 2025 年 2 月 16 日

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

Rakit 验证

Rakit 验证 是一个 PHP 独立验证库。它的灵感来自 Laravel 的 Illuminate\Validation

安装

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

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

简单示例

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

simple.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";
}

该例子验证一个必填值。

use Rakit\Validation\Validator;

我们包含验证器。

$validator = new Validator;

我们创建 Validator 的实例。

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

$vals 包含要验证的值。 $rules 包含验证规则。 在我们的例子中, name 值是必需的。

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

使用 make 方法,我们准备验证; 我们传递值和规则。

$validation->validate();

我们使用 validate 执行验证。

if ($validation->fails()) {

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

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

$messages = $coll->flatten();

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

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

$ php simple.php
The Name is required

验证规则

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

规则可以使用 | 字符组合。

rules.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";
}

该例子使用几个验证规则。

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

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

$ 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

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";
}

该例子验证了两个日期。

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

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

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

自定义消息

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

custom_message.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";
}

该例子添加了一个自定义消息。

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

这是我们的自定义消息。

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

消息被传递给 make 方法。

$ php custom_message.php
The name is compulsory

验证 GET 数据

在下面的例子中,我们验证 GET 数据。

get_data.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 请求的 name 和 email 参数。

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

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

$ php -S localhost:8000
[Wed Jul 13 15:08:56 2022] PHP 8.1.2 Development Server (https://:8000) started

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

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

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

来源

Rakit 验证 Github 参考

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

作者

我的名字是 Jan Bodnar,我是一位充满激情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我撰写了超过 1,400 篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 PHP 教程。