symfony2表单验证:form.errors VS form.fieldname.errors

时间:2013-06-19 11:15:40

标签: validation symfony symfony-forms

我对错误的出现方式存在疑问。

下面的

是我的表单构建器

的一部分
->add('editions', 'entity', array(
    'multiple' => true, 
    'expanded' => true, 
    'class' => 'MyBundle:Edition', 
    'property' => 'name',
    'constraints' => new Count(array('min' => 1, 'minMessage' => 'Choose at least one edition')),
    )
)
->add('releaseDates', 'collection', array(
    'type' => new ReleaseDateFormType(),
    'allow_add'    => true,
    'allow_delete' => true,
    'by_reference' => false,
    'constraints' => new Count(array('min' => 1, 'minMessage' => 'Choose at least one release date')),
    )
)

验证工作正常,但问题是,对于第一个字段“版本”,错误“附加”到字段本身,即

{{ form_errors(form.editions) }}

并且第二个字段错误附加到表单,但不附加到字段

{{ form_errors(form) }}

那么如何将错误分配给字段而不是表单?

3 个答案:

答案 0 :(得分:1)

尝试向releaseDates

添加选项'error_bubbling' => false

答案 1 :(得分:0)

您可以创建自己的验证程序,该验证程序从计数类扩展而来。然后在验证函数中使用以下函数(而不是addViolation)

$context->addViolationAt('fieldname', 'message', array(), null);

In Symfony 2.1:
$context->addViolationAtSubPath('fieldname', 'message', array(), null);

您可以将字段名称作为重用的参数:

'constraints' => new Count(array('fieldname' => $fieldname, 'min' => 1, 'minMessage' => 'Choose at least one edition'))

答案 2 :(得分:-1)

你有没有尝试过:

{{ form_errors(form.releaseDates) }}