2014-03-26 65 views
2

使用Symfony2.3.​​4和树枝 我敢打赌,这对任何人来说都是一件容易的事,但我无法完成它。
我试图只显示一个错误警报总是相同的消息,总是在窗体的beginnig,每次有错误,无论哪个字段包含无效输入。form_errors(表格)symfony2树枝

我想我能做到这一点是这样的:

//../Professor/Resources/new.html.twig 
    {% extends 'AdminBundle:Default:admin.html.twig' %} 

{% block content -%} 
<h1>New professor</h1> 
{% if form_errors(form) is not null %} {#<------------------------------------#} 
<div class="alert alert-error"> 
    <i class="glyphicon-ban-circle"></i>&nbsp;Message. 
</div> 
{% endif %} 

<div class="row-fluid">  
    <form id="prof_create" class="form-horizontal sf_admin_form_area" action="{{ path('professor_create') }}" 
      method="post" {{ form_enctype(form) }}> 
      {{ form_widget(form) }}  
     <div class="row-fluid"> 
      <div class="span8"></div>  
     </div> 
     <div class="form-actions"> 
      <button class="btn btn-primary"> 
       <i class="icon-ok"></i> {{'Create' | trans}}</button> 

      <a class="btn" href="{{ path('professor') }}"> 
       <i class="icon-ban-circle"></i> {{'Cancel' | trans }}</a> 
     </div>  
    </form> 
</div> 
{% endblock %} 

{%如果form_errors(形式)不为空%}不工作,这意味着:
当我显示了在创建表单第一次在输入字段中的任何数据之前,错误警报显示虽然字段中没有数据。

我也试过{%if form_errors(form)%}这也是无用的,但反过来说,没关系,如果有或没有错误,警报就不会显示。

显然有很多关于form_errors(表单),我不知道。
欣赏任何提示或甚至完全不同的解决方案。
感谢

+0

许多答案已被添加,其中一些依赖于'error_bubbling'设置。我已经在symfony食谱中增加了一个PR来改进文档。随意在这里投票:https://github.com/symfony/symfony-docs/issues/6145 – webDEVILopers

回答

1

尝试:

{% if form_errors(form) != '' %} 
... 
{% endif %} 

您还需要确保在所有领域的error_bubbling选项设置为true。如果你不这个错误只存在于孩子身上。所以主要的形式即使有些孩子也没有任何错误。

设置错误冒泡你需要它做的每个字段:

//Some FormType that you have created 
class CustomFormType extends AbstractType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('test', 'text', array('error_bubbling'=>true); 
    } 
} 

你的另一个选择是覆盖form_errors阻止类似建议中接受的答案here

{% block form_errors %} 
    {% spaceless %} 
     {% set a = false %} 
     {% for child in form.children %} 
      {% if child.get("errors") %} 
       {% set a = 'true' %} 
      {% endif %} 
     {% endfor %} 
     {% if a == true %} 
      <div class="alert"> 
       {% for children in form.children %} 
        {{ form_errors(children) }} 
       {% endfor %} 
      </div> 
     {% endif %} 
     {% if errors|length > 0 %} 
      <ul> 
       {% for error in errors %} 
        {{ 
        error.messagePluralization is null 
        ? error.messageTemplate|trans(error.messageParameters, 'validators') 
        : error.messageTemplate|transchoice(error.messagePluralization, error.messageParameters, 'validators') 
        }} 
       {% endfor %} 
      </ul> 
     {% endif %} 
    {% endspaceless %} 
{% endblock form_errors %} 
+0

我试过你刚刚发布的内容,但很抱歉,但是!==触发此错误“意外的令牌”操作符“值“=”...“。 然后我试了!=,它不显示错误,但不起作用:警报不显示有错误的输入,回到开始... – jmiguel

+0

** {{dump(form_errors(form)) }} **显示'string''(length = 0)',并且输入中存在错误,我真的不明白它 – jmiguel

+0

我怎样才能将我的设置为true?对不起,我现在只做了几个月的网络编程。 – jmiguel

4

有无你试试这个吗?

{% if form_errors(form.content) is not empty %} 
+0

这是完成我的朋友! –

1

尝试

{% if form.vars.errors|length %} 
+0

这有效,谢谢 – Mick