xphoenyx/valify

此软件包已被 废弃 且不再维护。未建议替代软件包。

一个用于用户输入验证的小型框架

v1.11 2015-08-07 09:23 UTC

This package is not auto-updated.

Last update: 2021-07-09 23:22:05 UTC


README

注意!此项目已归档,因此不再维护

Valify

一个用于用户输入验证的小型框架。它仍在开发中,因此请关注提交。灵感来自 Yii2 输入验证实现

要求

您需要 PHP 5.4 来运行此代码。

安装

下载源代码后,将以下代码添加到将要验证数据所在的文件中

require 'valify/Validator.php';
$validator = new Validator();

框架使用命名空间,因此请将以下行添加到调用验证器的文件顶部

use valify\Validator;

还有通过 composer 安装此框架的更直接的方法。在项目根目录中,在终端中输入以下命令

php composer.phar require xphoenyx/valify 1.*

现在您可以为您的数据验证做准备。

MVC 模式用户提示

您可以在基础模型类中实现自己的方法。请参考以下示例

use valify\Validator;

class Model {
    /* ... */
    
    protected $validator;
    // Your rules
    public $rules = [];
    // Here is stored $_POST, for example
    public $data = [];

    function __construct() {
        /* ... */
        $this->validator = new Validator();
        /* ... */
    }

    /*
     * Your other methods
     */

    public function validate() {
        return $this->validator
            ->setRules($this->rules)
            ->loadData($this->data)
            ->validate();
    }

    public function getErrors() {
        return $this->validator->getErrors();
    }
}

使用方法

使用方法类似于 Yii2 输入验证

定义规则

$rules = [
    [['username', 'password'], 'string', 'max'=>10],
    ['email', 'email', 'message'=>'Please provide a valid email'],
    ['remember_me', 'boolean']
    /* ... */
];

每个验证器都接受 message 参数,它应包含错误信息字符串。您可以通过所谓的 'patterns' 在 message 中访问属性名称及其值

['email', 'email', 'message'=>'{value} for attribute "{attribute}" is not a valid email'],

注意!如果值不能表示为字符串,则将显示值类型而不是值本身

您还可以通过扩展 valify\validator\AbstractValidator 类来实现自己的验证器。在这种情况下,如果您不使用 composer 自动加载器,则还应导入(require)AbstractValidator。要在规则中使用自己的验证器,只需将验证器命名空间定义为验证器名称

$rules = [
    /* ... */
    ['email', '\\examples\\ExampleValidator', 'ownProperty'=>'abc' /* ... */]
    /* ... */
];

确保在定义规则中的命名空间之前加载您的验证器。有关详细实现信息,请参阅 valify\validators\ExampleValidator

定义要验证的数据

期望输入数据具有以下格式

$data = [
    'username'=>'username',
    'password'=>'123qwe',
    'email'=>'address@gmail.com',
    'remember_me'=>'1',
    /* ... */
];

设置规则和数据

$validator = new Validator();
$validator = $validator->setRules($rules)->loadData($data)

您可以多次调用 setrules()loadData()

$validator = new Validator();
$validator = $validator
                ->setRules([...])
                ->loadData([...])
                ->setRules([...])
                ->setRules([...])
                ->loadData([...])
                ->loadData([...]);

执行验证

$isValid = $validator->validate();

您可以在不调用 setRules()loadData() 的情况下执行单个值验证

$password = $_POST['password'];
$isValid = Validator::validateFor('string', $password, ['min'=>6, 'max'=>20]);

对于多个值验证,将所需值的数组作为第二个参数传递

$values = [
    $_POST['username'],
    $_POST['first_name'],
    $_POST['password'],
];
$isValid = Validator::validateFor('string', $values, ['min'=>3, 'max'=>30]);

validateFor() 将返回一个包含两个属性的对象

  • isValid - 包含布尔值;
  • lastError - 包含最后的验证错误信息;
  • errors - 包含验证属性时整个错误信息堆栈;

获取错误信息

if($validator->hasErrors()) {
    $errorMsgs = $validator->getErrors();
}

您还可以获取单个属性的错误信息

$errorMsgForUserAttr = $validator->getError('username');

由于每个属性可能包含几个错误信息,getError() 将返回相应属性错误堆栈(数组)中的最后一条信息。

内置验证器列表

  • 布尔值
  • 电子邮件
  • 文件
  • 必填
  • 字符串
  • 网址
  • 电话
  • 在...之内
  • 数字
  • 比较
  • 唯一

有关每个验证器的详细参数描述,请参阅 valify/validators 中的类方法。

测试

为了正确运行单元测试,您需要指定 composer 自动加载文件的路径。然后在 valify(组件根目录)下终端中发出 phpunit 命令。

示例

查看 examples 目录中的 index.php,以查看框架的实际运行情况。

欢迎提交所有错误和问题报告以及改进建议。祝您使用愉快。