Doctrine Symfony2/条令-需要访问数据库的验证约束
我有一个实体Doctrine Symfony2/条令-需要访问数据库的验证约束,doctrine,symfony,doctrine-orm,Doctrine,Symfony,Doctrine Orm,我有一个实体ArticlePattern,它有一个属性pattern(字符串)。我需要访问数据库以检查模式是否正确。因此,我想定义一个方法ArticlePattern::isPatternValid(),并添加一个约束(使用条令的注释),该约束将在Validator对象验证期间检查isPatternValid是否为true 根据我在这里和那里读到的内容,让实体依赖于服务容器不是一个好主意,这意味着我无法从ArticlePattern::isPatternValid()内部访问doctrine服务
ArticlePattern
,它有一个属性pattern
(字符串)。我需要访问数据库以检查模式是否正确。因此,我想定义一个方法ArticlePattern::isPatternValid()
,并添加一个约束(使用条令的注释),该约束将在Validator对象验证期间检查isPatternValid是否为true
根据我在这里和那里读到的内容,让实体依赖于服务容器不是一个好主意,这意味着我无法从ArticlePattern::isPatternValid()内部访问doctrine服务
那么,如何创建需要访问数据库的自定义验证约束呢?我认为从实体类访问服务容器时会遇到很多问题,这是很常见的情况,您如何处理这种情况
编辑:
好的,谢谢大家,所以答案是,您的约束应该覆盖基本的
validatedBy()
方法,并返回容器中约束验证器服务的id
public function validatedBy()
{
return 'my_pattern_validator';
}
验证器对象可以是:
- 一个与框架环境完全没有连接的简单对象
- 一种服务(在的上下文中),只要它执行
Symfony\Component\Validator\ConstraintValidatorInterface
validatedBy()
方法以返回验证器“名称”(返回“我的验证器”;
)<service id="project.validator.my" class="Project\Constraints\MyValidator">
<!-- service definition here -->
<!-- the service has to be tagged -->
<tag name="validator.constraint_validator" alias="my_validator" />
</service>
@Assert/MyConstraint(...)
class MyClass {
private $firstName;
private $lastName;
@Assert/Email
private $email;
...
}
class MyValidator extends ConstraintValidator {
public function isValid($value, Constraint $constraint) {
// $value is an object rather a property
}
}
@Assert/MyConstraint(...)
class MyClass {
private $firstName;
private $lastName;
@Assert/Email
private $email;
...
}
class MyValidator extends ConstraintValidator {
public function isValid($value, Constraint $constraint) {
// $value is an object rather a property
}
}
我现在有另一个问题。在我的验证器中,我需要访问条令服务以及被验证对象的其他字段(不仅仅是那个字段)。如何实现这一点?好的,有一个方法ConstraintValidator::$context->getRoot(),它可能保存对验证对象的引用。我会检查的。作为跟进,我发布了另一个问题,也许你也能在那里提供帮助:你能发布验证代码的完整示例吗?