【发布时间】:2012-03-12 23:47:01
【问题描述】:
我需要能够在 Symfony2 中对整个实体进行复杂的自定义验证。
例如:我的entity 有很多subentities,所有subentities 的总和必须为100。
据我所知,Symfony2 验证器只验证单个字段?
【问题讨论】:
标签: validation symfony entities
我需要能够在 Symfony2 中对整个实体进行复杂的自定义验证。
例如:我的entity 有很多subentities,所有subentities 的总和必须为100。
据我所知,Symfony2 验证器只验证单个字段?
【问题讨论】:
标签: validation symfony entities
答案是肯定的。您需要针对对象而不是参数指定约束,并指定其为类级别约束的约束。一个有点冗长的例子是这样的:
config.yml
validator.my.uniquename:
class: FQCN\To\My\ConstraintValidator
arguments: [@service_container]
tags:
- { name: validator.constraint_validator, alias: ConstraintValidator }
validation.yml
FQCN\To\My\Entity:
constraints:
- FQCN\To\MyConstraint: ~
(本例中的约束没有参数)
我的约束
namespace FQCN\To;
use
Symfony\Component\Validator\Constraint
;
/**
* @Annotation
*/
class MyConstraint extends Constraint
{
public $message = 'Constraint not valid';
public function validatedBy()
{
return 'ConstraintValidator';
}
public function getTargets()
{
# This is the important bit.
return self::CLASS_CONSTRAINT;
}
}
我的约束验证器
class MyConstraintValidator extends ConstraintValidator
{
protected $container;
function __construct($container)
{
$this -> container = $container;
}
function isValid($object, Constraint $constraint)
{
# validation here.
return true;
}
}
【讨论】:
The constraint MyBundle\Validator\Constraint cannot be put on properties or getters ?