从不检查自定义约束

时间:2015-03-25 16:42:16

标签: php validation symfony

我正在尝试用他的约束做一个简单的验证器。

约束

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)

2 个答案:

答案 0 :(得分:1)

调试提示:

在控制器内部,使用以下内容获取属性的所有约束。

$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中看到两个约束,那么也许长度会干扰自定义约束,所以尝试运行不带长度约束的代码。

答案 1 :(得分:0)

通过添加我的formType

中定义的group来修复
- Me\MyBundle\Validator\Constraint\MyConstraint:
    groups: ['the_related_form']

[Default]没有用,我不明白为什么