我正在尝试用他的约束做一个简单的验证器。
约束
namespace Me\MyBundle\Validator\Constraint;
use Symfony\Component\Validator\Constraint;
class MyConstraint extends Constraint
{
public $message = 'Grossière erreur';
}
验证
namespace Me\MyBundle\Validator\Constraint;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class MyConstraintValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
$this->context->buildViolation($constraint->message)
->addViolation();
return false;
}
}
验证
Me\MyBundle\Entity\MyEntity:
properties:
myField:
- Length:
min: 9
- Me\MyBundle\Validator\Constraint\MyConstraint: ~
正如您所看到的,myField
有2个约束,Length
已被选中,但MyConstraint
永远不会。
可能有什么不对?我该怎么调试呢?
(Symfony 2.5.9)
答案 0 :(得分:1)
调试提示:
在控制器内部,使用以下内容获取属性的所有约束。
$factory = $this->container->get('validator.mapping.class_metadata_factory');
$classMetadata = $factory->getMetadataFor('Your\Bundle\Entity\Name');
$propertyMetadata = $classMetadata->getPropertyMetadata('propertyName');
如果你在$propertyMetadata
中看到两个约束,那么也许长度会干扰自定义约束,所以尝试运行不带长度约束的代码。
答案 1 :(得分:0)
通过添加我的formType
中定义的group
来修复
- Me\MyBundle\Validator\Constraint\MyConstraint:
groups: ['the_related_form']
[Default]
没有用,我不明白为什么