【问题标题】:symfony2 form validation: form.errors VS form.fieldname.errorssymfony2 表单验证:form.errors VS form.fieldname.errors
【发布时间】:2013-06-19 11:15:40
【问题描述】:

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

以下是我的表单生成器的一部分

->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) }}

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

【问题讨论】:

    标签: validation symfony symfony-forms


    【解决方案1】:

    尝试将选项'error_bubbling' => false 添加到releaseDates

    【讨论】:

      【解决方案2】:

      您可以创建自己的从 count 类扩展而来的验证器。然后在验证函数中使用以下函数(而不是 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'))
      

      【讨论】:

      • 正如我所说,验证正在工作,它只是在表单上设置错误消息,但在字段中,设置 'error_bubbling' => false 有帮助,感谢 Michael Sivolobov
      【解决方案3】:

      你试过了吗:

      {{ form_errors(form.releaseDates) }}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-10
        相关资源
        最近更新 更多