harryosmar/plugin-validation

该软件包最新版本(v2.2.3)没有提供许可证信息。

PHP Composer 验证插件

v2.2.3 2018-03-08 10:55 UTC

This package is not auto-updated.

Last update: 2024-09-19 08:37:08 UTC


README

用于验证的 Composer 插件,包含一系列验证规则。

Latest Version Build Status Scrutinizer Code Quality Code Coverage

功能

  • 多语言支持,提供 enid 或使用您自己的 自定义翻译
  • 支持多 fields 验证,一个 field 可以有多个 rules
validation > fields > rules

validation structure

安装

添加以下 composer.json 文件

{
    "require": {
        "harryosmar/plugin-validation": "^2.2"
    }
}

然后运行

$ composer install

或者输入

composer require harryosmar/plugin-validation

composer.json 根目录下

如何使用

1. 初始化
<?php
use PluginSimpleValidate\Validation;
use PluginSimpleValidate\Field;
use PluginSimpleValidate\Libraries\Language;

$language = new Language('en');
$validation = new Validation($this->language);
$emailField = (new Field('email', ''))->required()->validEmail();
$passwordField = (new Field('password', ''))->required()->isAlphaOrNumeric()->lengthGreaterThan(5); // add chain of rules to the `field`
2. 将 fields 添加到 $validation 对象
<?php
/**
 * @var \PluginSimpleValidate\Validation $validation
 * @var \PluginSimpleValidate\Field $emailField
 * @var \PluginSimpleValidate\Field $passwordField
 */
$validation->addField($emailField)->addField($passwordField); // add chain of fields to `$validation` object
3. 调用 $validation 对象的 run 方法
<?php 
/** @var \PluginSimpleValidate\Validation $validation */
$status = $validation->run();
4. 如果 $statusfalse,获取错误信息
<?php
/** 
 * @var \PluginSimpleValidate\Validation $validation 
 * @var bool $status
 */
if (!$status) {
    $errors = $validation->getErrors(); // return array of errors message
}

$erros

<?php
[
    'email' => [
        'field is required',
        'field must be a valid email address'
    ],
    'password' => [
        'field is required',
        'field may only letters and numbers',
        'field length must be greater than 5'
    ],
];
带有 break 验证链的验证

如果某个 field 出现错误,您可以 break 验证链。在 步骤 3 中,当调用 $validation 对象的 run 方法时,添加参数 true 以启用 当发生错误时断开链

<?php 
/**
 * @var \PluginSimpleValidate\Validation $validation
 * @var bool $status
 */
$status = $validation->run(true);

if (!$status) {
    $errors = $validation->getErrors(); // return array of errors message
}

然后 $erros 值将是

<?php
[
    'email' => [
        'field is required',
        'field must be a valid email address'
    ]
];

2 种验证类型

验证

查看 示例代码

表单验证

<?php
use PluginSimpleValidate\FormValidation;

/** @var \PluginSimpleValidate\Libraries\Language $language */
$validation = new FormValidation($language);

/**
* sample of request body
 * [
       'email' => 'abc',
       'grant_type' => '',
       'client_id' => '',
       'client_secret' => '',
       'redirect_uri' => '',
       'username' => '',
       'password' => '',
       'scope' => '',
   ]
*/


$validation->createFromPost(
    \Zend\Diactoros\ServerRequestFactory::fromGlobals(),
    [
        'email' => 'required,validEmail',
        'grant_type' => 'required',
        'client_id' => 'required,isNumber',
        'client_secret' => 'required,isAlphaOrNumeric',
        'redirect_uri' => 'required',
        'username' => 'required,lengthBetweenOrEqual:5:10',
        'password' => 'required,lengthGreaterThan:5',
        'scope' => 'required',
    ]
);

$validation->run();

if (!$validation->getStatus()) {
    $errors = $validation->getErrors();
}

$erros 将是

<?php
[
    'email' => [
        'field must be a valid email address',
    ],
    'grant_type' => [
        'field is required',
    ],
    'client_id' => [
        'field is required',
        'field must be a number',
    ],
    'client_secret' => [
        'field is required',
        'field may only letters and numbers',
    ],
    'redirect_uri' => [
        'field is required',
    ],
    'username' => [
        'field is required',
        'field length must be greater or equal than 5 or less or equal than 10',
    ],
    'password' => [
        'field is required',
        'field length must be greater than 5',
    ],
    'scope' => [
        'field is required',
    ],
];

字段

有 2 种类型的 field 可用

  • 单值 PluginSimpleValidate\Field 字段
<?php
use PluginSimpleValidate\Field;
use PluginSimpleValidate\Validation;

$firstNameField = (new Field('firstname', ''))->required()->lengthGreaterOrEqualThan(4);
$lastNameField = (new Field('lastname', ''))->required()->lengthGreaterOrEqualThan(4);
$fullNameField = (new Field(
    'fullname',
    $firstNameField->getValue() . ' ' . $lastNameField->getValue()
))->lengthGreaterOrEqualThan(10);

/** @var Validation $validation  */
$validation->addField($firstNameField)->addField($lastNameField)->addField($fullNameField);

if (!$validation->run()) {
    $errors = $validation->getErrors();
}

$errors 将是

<?php
[
    [
        'firstname' => [
            'field is required',
            'field length must be greater or equal than 4',
        ],
        'lastname' => [
            'field is required',
            'field length must be greater or equal than 4',
        ],
        'fullname' => [
            'field length must be greater or equal than 10',
        ],
    ]
];
  • 多值 PluginSimpleValidate\MultiValues\Field 字段
<?php
use PluginSimpleValidate\MultiValues\Field;
use PluginSimpleValidate\Validation;

$firstName = '';
$lastName = '';

/** @var Validation $validation  */
$validation->addField((new Field('name'))
    ->isTrue($firstName !== '', 'first name required')->isTrue(strlen($firstName) >= 4, 'first name length must be at least 4')
    ->isTrue($lastName !== '', 'last name required')->isTrue(strlen($lastName) >= 4, 'last name length must be at least 4')
    ->isTrue(strlen($firstName . ' ' . $lastName) >= 10, 'full name length must be at least 10'));

if (!$validation->run()) {
    $errors = $validation->getErrors();   
}

$errors 将是

<?php
[
    'name' => [
        'first name required',
        'first name length must be at least 4',
        'last name required',
        'last name length must be at least 4',
        'full name length must be at least 10',
    ]
];

可用规则

必填
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->required();
数字
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->isNumber();
电子邮件
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->validEmail();
字母
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->isAlpha();
字母或数字
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->isAlphaOrNumeric();
十进制数
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->isDecimal();
自然数
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->isNatural();
非零自然数
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->isNaturalNoZero();
等于
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->equal('old password');
小于
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->lessThan(5);
大于
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->greaterThan(5);
小于等于
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->lessOrEqualThan(5);
大于等于
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->greaterOrEqualThan(5);
在...之间
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->between(5, 10);
在...之间或等于
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->betweenOrEqual(5, 10);
长度
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->length(5);
长度小于
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->lengthLessThan(5);
长度大于
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->lengthGreaterThan(5);
长度小于等于
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->lengthLessOrEqualThan(5);
长度大于等于
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->lengthGreaterOrEqualThan(5);
长度在...之间
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->lengthBetween(5, 10);
长度在...之间或等于
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->lengthBetweenOrEqual(5, 10);
用于 custom rule logicis true
<?php
$field = new \PluginSimpleValidate\Field('field', someMethod());
$field->isTrue('this is for error message');

function someMethod() : bool 
{
    // add logic here
    return true;
}
有效电话
<?php
/**
 * @var \PluginSimpleValidate\Field $field
 */
$field->isValidPhone('ID'); // `ID` is region code for `indonesia` country

自定义翻译

如果您想使用自己的翻译,在实例化 Language 类时提供参数 $translation 数组

<?php
use PluginSimpleValidate\Libraries\Language;

/** 
 * @var array $translationArray
 * $translationArray must have the same format with https://github.com/harryosmar/plugin-validation/blob/master/src/lang/en.php
 */
$language = new Language('pl', $translationArray);

提交错误和功能请求

Harry Osmar Sitohang - harryosmarsitohang@gmail.com - https://github.com/harryosmar
还可以查看参与此项目的 贡献者列表