防止Symfony中的多个验证错误

时间:2013-01-09 09:05:55

标签: php forms validation symfony symfony-2.1

$this->createFormBuilder(null, array(
    'validation_constraint' => new Collection(array(
        'randominput' => array(
            new NotBlank(),
            new Email(),
            new MyCustomConstraint()
        )
))
->add('randominput', 'text');

提交结果(从html中移除必需属性,使用firebug):http://i.stack.imgur.com/4k4H6.png

来自Email()约束的消息不起作用,因为在该约束内部存在一段代码,我认为是NotBlank()约束的克隆/硬编码

if (null === $value || '' === $value) {
    return;
}

我认为Email()约束应该是NotBlank()的子句...

如果NotBlank()发现违规,我希望不执行MyCustomConstraint()。因此,如果是某种选择将是好的,例如“breakNextConstraintExecutionOnFirstViolation”=>真正。因此,如果我为一个字段设置了10个约束,而第三个约束设置了违规,则不会执行下一个7个约束。

如果symfony2中不存在这种逻辑/选项,那么如果我可以从MyCustomConstraint类访问'validation'服务并重用现有约束但不为每个新约束编写硬编码将会很好:

class MyCustomConstraintValidator extends ConstraintValidator
{
    public function validate($value, Constraint $constraint)
    {
        // use the validator to validate the value, not hardcode
        if (count( $this->get('validator')->validateValue(
            $value,
            new NotBlank()
        )) > 0)
        {
            return;
        }

        $this->context->addViolation('MyCustomConstraint Message...');
    }
}

所以我的问题是:我应该怎么做才能防止一个字段的多个违规消息,并且不要在每个新的约束硬编码中使用?

P.S。在我之前的项目(不是symfony)中,我创建的表单只显示一条错误消息。因此,用户逐个完成字段,只看到一个错误但没有提交表单,并且每个字段都填充红色错误(并且会吓到一些用户)。但现在至少我想解决这个问题。

1 个答案:

答案 0 :(得分:1)

最近开了this ticket,问题将在未来解决