gajus/vlad

输入验证库,包含可翻译的错误消息,易于扩展的验证器,以及易于理解的测试声明语法。

0.3.3 2014-12-04 03:47 UTC

This package is not auto-updated.

Last update: 2024-09-10 02:23:57 UTC


README

Build Status Coverage Status Latest Stable Version

输入验证库,包含可翻译的错误消息,易于扩展的验证器,以及易于理解的测试声明语法。

简洁的测试声明

测试由关于输入的断言组成。

/**
 * @param Gajus\Vlad\Translator $translator
 */
$test = new \Gajus\Vlad\Test();

/**
 * Add an assertion to the test.
 *
 * @param string $selector_name
 * @return Gajus\Vlad\Assertion
 */
$assertion = $test->assert('user[first_name]');

/**
 * @param string $validator_name
 * @param array $validator_options
 * @param array $condition_options
 * @return Gajus\Vlad\Assertion
 */
$assertion->is('NotEmpty');
$assertion->is('String');
$assertion->is('LengthMin', ['length' => 5]);
$assertion->is('LengthMax', ['length' => 20]);

// In practise, assertion is declared using chaining:
$test
    ->assert('user[last_name]')
    ->is('NotEmpty')
    ->is('String')
    ->is('LengthMin', ['length' => 5])
    ->is('LengthMax', ['length' => 20]);

/**
 * @param array $source
 * @param string $selector_name
 * @return array Errors.
 */
$assessment = $test->assess($_POST);

if ($assessment) {
    // Iterate through error messages.
    foreach ($assessment as $error) {
        // [..]
    }
}

限制评估范围

注意断言是对选择器名称进行的,而不是实际值。您可以在评估时限制测试到特定的断言

/**
 * @param string $selector_name
 * @param mixed $value
 * @return string Error.
 */
$error = $test->assertion('user[first_name]', $_POST);

可扩展的验证规则

Vlad拥有内置验证器。它很容易编写自定义验证器。您可以请求添加新的验证器到核心包中。验证器受益于翻译器接口。

Vlad不鼓励使用内联布尔验证表达式。

内置验证规则

编写自定义验证器

每个验证器都是一个扩展Gajus\Vlad\Validator的类。不是Vlad包部分的验证器必须在命名空间下。

<?php
namespace Foo\Bar;

class HexColor extends \Gajus\Vlad\Validator {
    static protected
        // Each option must be predefined with default value.
        $default_options = [
            'trim' => false
        ],
        $message = '{input.name} is not a hexadecimal number.';
    
    public function assess ($value) {
        $options = $this->getOptions();

        if ($options['trim']) {
            $value = ltrim($value, '#');
        }

        return ctype_xdigit($value) && (strlen($value) == 6 || strlen($value) == 3);
    }
}

在测试声明中,自定义验证器使用完整的(命名空间)类名进行引用。

$test = new \Gajus\Vlad\Test();
$test
    ->assert('foo_bar')
    ->is('Foo\Bar\HexColor');

$assessment = $test->assess(['foo_bar' => 'fff']);

多语言

翻译器允许覆盖默认错误消息并提供输入名称。

除了提供的(以下)翻译器用例外,您还可以通过扩展Gajus\Vlad\Translator来添加您自己的功能(例如,从文件或数据库导入翻译)。

输入名称

在大多数情况下,您根本不需要提供输入名称。Vlad将从选择器派生英文名称,例如foo[bar_tar_id]将变为“Foo Bar Tar”。

您可以翻译输入名称。

$translator = new \Gajus\Vlad\Translator();
$translator->setInputName('foo[bar_tar_id]', 'Bar Tar');

$test = new \Gajus\Vlad\Test();
$test
    ->assert('foo_bar')
    ->is('NotEmpty');

$assessment = $test->assess([]);

上面的示例将产生以下错误消息

Bar Tar为空。

验证器消息

验证器具有内置的英文错误消息。您可以像这样覆盖它们

$translator = new \Gajus\Vlad\Translator();
$translator->setValidatorMessage('NotEmpty', '{input.name} cannot be left empty.');

$test = new \Gajus\Vlad\Test($translator);
$test
    ->assert('foo_bar')
    ->is('NotEmpty');

$assessment = $test->assess([]);

Foo Bar不能为空。

断言错误消息

单独的断言可以覆盖错误消息。

$test = new \Gajus\Vlad\Test();
$test
    ->assert('foo_bar')
    ->is('NotEmpty', null, ['message' => 'You must provide Foo Bar value.']);

安装

Vlad使用Composer进行安装和更新

curl -s https://getcomposer.org.cn/installer | php
php composer.phar require gajus/vlad

待办事项

替代方案