从未检查过的自定义约束
Custom constraint never checked against
我正在尝试用他的约束做一个简单的验证器。
约束
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)
调试提示:
在您的控制器中,使用以下命令获取 属性 的所有约束。
$factory = $this->container->get('validator.mapping.class_metadata_factory');
$classMetadata = $factory->getMetadataFor('Your\Bundle\Entity\Name');
$propertyMetadata = $classMetadata->getPropertyMetadata('propertyName');
(inspired by this answer)
如果您在 $propertyMetadata
中看到两个约束,那么长度可能会干扰自定义的,因此请尝试 运行 没有长度约束的代码。
通过添加在我的 formType
中定义的 group
修复
- Me\MyBundle\Validator\Constraint\MyConstraint:
groups: ['the_related_form']
[Default]
没有成功,我不明白为什么
我正在尝试用他的约束做一个简单的验证器。
约束
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)
调试提示:
在您的控制器中,使用以下命令获取 属性 的所有约束。
$factory = $this->container->get('validator.mapping.class_metadata_factory');
$classMetadata = $factory->getMetadataFor('Your\Bundle\Entity\Name');
$propertyMetadata = $classMetadata->getPropertyMetadata('propertyName');
(inspired by this answer)
如果您在 $propertyMetadata
中看到两个约束,那么长度可能会干扰自定义的,因此请尝试 运行 没有长度约束的代码。
通过添加在我的 formType
中定义的group
修复
- Me\MyBundle\Validator\Constraint\MyConstraint:
groups: ['the_related_form']
[Default]
没有成功,我不明白为什么