从未检查过的自定义约束

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] 没有成功,我不明白为什么