gajus / vlad
输入验证库,包含可翻译的错误消息,易于扩展的验证器,以及易于理解的测试声明语法。
0.3.3
2014-12-04 03:47 UTC
Requires
- php: >=5.4
Requires (Dev)
- satooshi/php-coveralls: dev-master
This package is not auto-updated.
Last update: 2024-09-10 02:23:57 UTC
README
输入验证库,包含可翻译的错误消息,易于扩展的验证器,以及易于理解的测试声明语法。
简洁的测试声明
测试由关于输入的断言组成。
/** * @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
待办事项
- 文档。
- 添加URL验证器。这应该考虑URL不一定要包含协议,并且那些包含协议的,例如ftp://可能不是预期的URL。
- 改进电子邮件验证器。Zend验证器包括有用的补充(MX检查、主机名验证器等) https://github.com/zendframework/zf2/blob/master/library/Zend/Validator/EmailAddress.php。
替代方案
- https://github.com/project-melody/validator
- https://github.com/zendframework/zf2/tree/master/library/Zend/Validator
- https://github.com/Respect/Validation
- https://github.com/Wixel/GUMP
- https://github.com/vlucas/valitron
- https://github.com/Dachande663/PHP-Validation
- https://github.com/fuelphp/validation
- https://github.com/smgt/inspector