fivepercent / var-tag-validator
通过 var 标签验证对象
v1.0
2015-06-04 08:51 UTC
Requires
- php: >=5.4
- fivepercent/cache: ~1.0
- fivepercent/exception: ~1.0
- fivepercent/reflection: ~1.0
- phpdocumentor/reflection-docblock: ~2.0
- symfony/validator: ~2.3
This package is not auto-updated.
Last update: 2024-09-28 17:12:42 UTC
README
使用此包,您可以通过 @var 标签验证对象。
安装
在您的 composer.json 中添加 FivePercent/VarTagValidator
{ "require": { "fivepercent/var-tag-validator": "~1.0" } }
现在通过运行以下命令让 composer 下载库
$ php composer.phar update fivepercent/var-tag-validator
基本使用
基本创建 VarTagValidator 实例
use FivePercent\Component\VarTagValidator\VarTagValidator; use FivePercent\Component\VarTagValidator\Metadata\MetadataFactory; use Symfony\Component\Validator\ValidatorBuilder; $validator = (new ValidatorBuilder()) ->getValidator(); $metadataFactory = new MetadataFactory(); $varTagValidator = new VarTagValidator($validator, $metadataFactory);
创建 VarTagValidator 实例后,您可以通过 @var 标签验证对象
class MyClass { /** * @var int */ public $id; /** * @var string */ public $firstName; } $object = new MyClass(); $object->id = 1; $object->firstName = 'Foo Bar'; $violationList = $varTagValidator->validateObjectByVarTags($object);
注意: VarTagValidator 系统使用 Symfony Validator 验证值。
可用的 @var 标签类型
- integer, int
- string
- scalar
- array
自定义 Var 标签
- 如果您想添加自定义 @var 标签类型,例如 Money,您必须为此类型创建一个 ConstraintFactory
- 并将其添加到注册表中。
步骤 #1: 创建约束工厂
use FivePercent\Component\VarTagValidator\Constraint\ConstraintFactoryInterface; use Symfony\Component\Validator\Constraints as Assert; use FivePercent\Component\VarTagValidator\Constraint\VarTagConstraint; class MoneyConstraintFactory implements ConstraintFactoryInterface { /** * {@inheritDoc} */ public function getVarTagConstraint() { $constraints = array( new Assert\Type('numeric') ); return new VarTagConstraint($constraints); } }
如果需要,您可以为 Symfony2 Validator 设置一个 分组序列
use FivePercent\Component\VarTagValidator\Constraint\ConstraintFactoryInterface; use Symfony\Component\Validator\Constraints as Assert; use FivePercent\Component\VarTagValidator\Constraint\VarTagConstraint; use Symfony\Component\Validator\Constraints\GroupSequence; class MoneyConstraintFactory implements ConstraintFactoryInterface { /** * {@inheritDoc} */ public function getVarTagConstraint() { $constraints = []; $constraints[] = new Assert\Type([ 'type' => 'numeric', 'message' => 'This value should be of type money.', 'groups' => 'FirstStep' ]); $constraints[] = new Assert\Regex([ 'pattern' => '/^\d+\.\d{2}$/', 'message' => 'This value should be of type money.', 'groups' => 'SecondStep' ]); $groupSequence = new GroupSequence(['FirstStep', 'SecondStep']); return new VarTagConstraint($constraints, $groupSequence); } }
步骤 #2: 将约束工厂添加到注册表
use FivePercent\Component\VarTagValidator\VarTagValidator; use FivePercent\Component\VarTagValidator\Metadata\MetadataFactory; use Symfony\Component\Validator\ValidatorBuilder; use FivePercent\Component\VarTagValidator\Constraint\FactoryRegistry; $registry = FactoryRegistry::createDefault(); $registry->addConstraintFactory('money', new MoneyConstraintFactory()); $validator = (new ValidatorBuilder()) ->getValidator(); $metadataFactory = new MetadataFactory(); $varTagValidator = new VarTagValidator($validator, $metadataFactory, $registry);
技巧 & 技巧
- 您可以为类型添加别名到注册表。
- 例如: int -> integer,或 float -> double 更多信息,请参阅
FivePercent\Component\VarTagValidator\Constraint\FactoryRegistryInterface::addConstraintFactoryAlias