earc / validator
eArc - 显式架构框架 - 验证组件
Requires
- php: ^8.0
Requires (Dev)
- phpunit/phpunit: ^9.5
- symfony/var-dumper: ^5.3
This package is auto-updated.
Last update: 2024-09-05 08:03:21 UTC
README
轻量级无依赖的验证组件,用于earc框架的SOLID验证方法。
目录
安装
$ composer require earc/validator
引导
earc/validator 不需要任何引导。
配置
earc/validator 不需要任何配置。
基本用法
检查
验证将分两步进行。
- 定义要验证的验证逻辑。
- 检查验证逻辑是否针对目标成立。
设置验证逻辑后,可以无限次针对不同的目标进行重复检查。
use eArc\Validator\ValidatorFactory; $validator = (new ValidatorFactory())->build(); $validator->email(); $validator->check('validator@example.com'); // returns true $validator->check('no-email-address'); // returns false
通过将第二个参数传递为 true
值而不是返回 true 或 false,将抛出 AssertException
。
use eArc\Validator\Exceptions\AssertException; use eArc\Validator\ValidatorFactory; $validator = (new ValidatorFactory())->build(); $validator->email(); $throwOnNotValid = true; try { $validator->check('no-email-address', $throwOnNotValid); } catch (AssertException) { // email not valid }
验证
要获取解释值为何无效的消息,请使用 validate()
而不是 check()
。它返回一个结果对象而不是布尔值。
use eArc\Validator\Exceptions\AssertException; use eArc\Validator\ValidatorFactory; $validator = (new ValidatorFactory())->build(); $validator->email(); $result = $validator->validate('no-email-address'); if (!$result->isValid()) { echo $result->getFirstErrorMessage(); // echos 'has to be a valid email address' } $throwOnError = true; try { $validator->validate('no-email-address', $throwOnError); } catch (AssertException $e) { echo $e->getResult()->getFirstErrorMessage(); // echos 'has to be a valid email address' }
您可以使用自己的消息。
链式验证逻辑
合取 AND (AllOf)
最简单的链是通过 AND
合取构建的。您可以通过三种不同的方式这样做
- 后续调用原子验证器方法。
- 原子验证器方法的链式调用。
- 使用
AND()
或AllOf()
方法。
如果所有参数都验证为 true,则验证为真。
use eArc\Validator\ValidatorFactory; // 1. Subsequent calls to atomic validator methods: $validator = (new ValidatorFactory())->build(); $validator->email(); $validator->regex('/@example\.com$/'); $validator->check('validator@example.com'); // returns true $validator->check('validator@example.de'); // returns false $validator->check('valid\\tor@example.com'); // returns false // 2. Method chaining of atomic validator methods: $validator = (new ValidatorFactory()) ->build() ->email() ->regex('/@example\.com$/'); // 3.1 Use of the `AND()` method. $validator = (new ValidatorFactory())->build(); $validator = $validator->AND( $validator->email(), $validator->regex('/@example\.com$/') ); // 3.1 Use of the `AllOf()` method. $validator = (new ValidatorFactory())->build(); $validator = $validator->AllOf( $validator->email(), $validator->regex('/@example\.com$/') );
选择或混合它们只是语法偏好的问题。
合取 OR (OneOf)
逻辑 OR
由两个方法 OR()
和 OneOf()
表示。两者都接受 Validators
作为参数。
如果任一参数验证为 true,则验证为真。
use eArc\Validator\ValidatorFactory; $validator = (new ValidatorFactory())->build(); $validator = $validator->email()->OR( $validator->regex('/@example\.com$/'), $validator->regex('/@coding-crimes\.com$/'), ); $validator->check('validator@example.com'); // returns true $validator->check('validator@coding-crimes.com'); // returns true $validator->check('validtor@example.de'); // returns false // The above validation logic is equivalent to: $validator = (new ValidatorFactory())->build(); $validator = $validator->email()->OneOf( $validator->regex('/@example\.com$/'), $validator->regex('/@coding-crimes\.com$/') );
合取 XOR (NoneOf)
逻辑 XOR
由两个方法 XOR()
和 NoneOf()
表示。两者都接受 Validators
作为参数。
如果没有参数验证为 true,则验证为真。
use eArc\Validator\ValidatorFactory; $validator = (new ValidatorFactory())->build(); $validator = $validator->email()->XOR( $validator->regex('/@blacklisted\.com$/'), $validator->regex('/@coding-crimes\.com$/'), ); $validator->check('validator@example.com'); // returns true $validator->check('validator@blacklisted.com'); // returns false $validator->check('validator@coding-crimes.com'); // returns false // The above validation logic is equivalent to: $validator = (new ValidatorFactory())->build(); $validator = $validator->email()->NoneOf( $validator->regex('/@blacklisted\.com$/'), $validator->regex('/@coding-crimes\.com$/') );
逻辑否定 NOT
逻辑否定可以通过 NOT()
方法实现。
NOT()
为真,如果所有参数和右侧的验证链验证为 false。
条件验证 WHEN
要实现条件验证,存在 WHEN()
方法。
如果第一个参数为 true,则将验证第二个参数。否则,将使用第三个参数进行验证,默认为 true。
混合验证器
完整验证 (assert)
局部个性化消息
有两个方法会影响验证错误消息。 withKey()
设置验证错误消息的消息键。 with()
设置验证错误消息本身。
消息也可以在全球范围内个性化。
带有键
带有
对象属性验证(使用属性)
高级用法
全局个性化消息(本地化)
扩展原子验证逻辑
版本
版本 0.0
- 第一个官方版本
- PHP ^8.0
- 即将推出(代码库 <= 发布候选状态)
- 待办事项
- 文档
- 测试