五实验室 / var-tag-validator
此包已被废弃,不再维护。未建议替代包。
通过 var 标签验证对象
v1.0.2
2016-03-21 09:51 UTC
Requires
- php: >=5.4
- fivelab/cache: ~1.0
- fivelab/exception: ~1.0
- fivelab/reflection: ~1.0
- phpdocumentor/reflection-docblock: ~2.0
- symfony/validator: ~2.7|~3.0
Requires (Dev)
- phpunit/phpunit: 4.*
This package is not auto-updated.
Last update: 2017-08-16 12:52:44 UTC
README
使用此包,您可以通过 @var 标签验证对象。
安装
在您的 composer.json 中添加 FiveLab/VarTagValidator
{ "require": { "fivelab/var-tag-validator": "~1.0" } }
现在运行以下命令,让 composer 下载库
$ php composer.phar update fivelab/var-tag-validator
基本用法
基本创建 VarTagValidator 实例
use FiveLab\Component\VarTagValidator\VarTagValidator; use FiveLab\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
- float, double
- string
- array
自定义 Var 标签
- 如果您想添加自定义 @var 标签类型,例如 Money,您必须为该类型创建一个 ConstraintFactory
- 并将其添加到注册表中。
步骤 #1: 创建约束工厂
use FiveLab\Component\VarTagValidator\Constraint\ConstraintFactoryInterface; use Symfony\Component\Validator\Constraints as Assert; use FiveLab\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 FiveLab\Component\VarTagValidator\Constraint\ConstraintFactoryInterface; use Symfony\Component\Validator\Constraints as Assert; use FiveLab\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 FiveLab\Component\VarTagValidator\VarTagValidator; use FiveLab\Component\VarTagValidator\Metadata\MetadataFactory; use Symfony\Component\Validator\ValidatorBuilder; use FiveLab\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 更多信息,请参阅
FiveLab\Component\VarTagValidator\Constraint\FactoryRegistryInterface::addConstraintFactoryAlias