2012-04-25 56 views
4

在树枝,有没有办法定义一个不同的主题为字段错误反对形成相关的错误,如CSRF错误或复合独特的约束?symfony2格式错误vs字段错误主题(树枝)

我想用一个<ul>

{{ form_errors(form) }}   

<table> 
    <tbody> 
     <tr> 
      <td>{{ form_label(form.tabla) }}</td> 
      <td> 
       {{ form_widget(form.tabla) }} 
       {{ form_errors(form.tabla) }} 
      </td> 
      <td></td> 
      <td>{{ form_label(form.descripcion) }}</td> 
      <td> 
       {{ form_widget(form.descripcion) }} 
       {{ form_errors(form.descripcion) }} 
      </td> 
      <td></td> 
     </tr> 
    </tbody> 
</table> 

这是被用于两种情况下(不是我想要的)我的形式主题,以显示与<span>场误差和形状误差。

{% block field_errors %} 
    {% if errors|length > 0 %} 
     <span class="val-error"> 
      {% for error in errors %} 
       {{ error.messageTemplate|trans(error.messageParameters, 'validators')~'. ' }} 
      {% endfor %} 
     </span> 
    {% endif %} 
{% endblock field_errors %} 

有没有区分两种情况的方法?

回答

1

由于field_*在2.3中被删除,因此已批准的解决方案将不再有效。我找到了一个哈克解决方案是

{% block form_errors %} 
    {% if errors|length > 0 %} 
     {% if form.parent is empty %} 
      <ul class="val-error"> 
       {% for error in errors %} 
        <li>{{ error.messageTemplate|trans(error.messageParameters, 'validators')~'. ' }}</li> 
       {% endfor %} 
      </ul> 
     {% else %} 
      <span class="val-error"> 
       {% for error in errors %} 
        {{ error.messageTemplate|trans(error.messageParameters, 'validators')~'. ' }} 
       {% endfor %} 
      </span> 
     {% endif %} 
    {% endif %} 
{% endblock form_errors %} 

所以基本上这是如果没有父母,它知道它是最高级别。

4

Form类扩展Field。如果您将新的主题设置为字段,它将应用于表单。 您应该重写field_errors块,然后使用另一个模板(使用th标签)定义form_errors块。

{% block field_errors %} 
    {% if errors|length > 0 %} 
     <span class="val-error"> 
      {% for error in errors %} 
       {{ error.messageTemplate|trans(error.messageParameters, 'validators')~'. ' }} 
      {% endfor %} 
     </span> 
    {% endif %} 
{% endblock field_errors %} 

{% block form_errors %} 
    {% if errors|length > 0 %} 
     <ul class="val-error"> 
      {% for error in errors %} 
       <li>{{ error.messageTemplate|trans(error.messageParameters, 'validators')~'. ' }}</li> 
      {% endfor %} 
     </ul> 
    {% endif %} 
{% endblock form_errors %} 
+0

谢谢你,这是一个很大的帮助,因为该块“form_errors”没有显示在“fom_div_layout.html.twig”,我甚至不知道它存在 – 2012-04-27 04:41:21

+2

我有一个关于这个问题。在https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig中表示,field_ *将在Symfony 2.1中弃用,在2.3中删除。如何做到这一点,而不使用它? – unairoldan 2012-05-21 18:49:55

+0

@ Ztere0是否发现它是否使用field_error块保存?对我来说,它似乎不是,如果它将在2.3 – dag 2012-10-24 14:58:09