form_errors(form)symfony2 twig

时间:2014-03-26 02:04:17

标签: forms symfony error-handling twig

使用Symfony2.3.​​4和Twig 我敢打赌这对任何人来说都很容易,但是我无法完成它 我试图只显示一个始终在同一消息的错误警报,始终在表单的beginnig,每次有错误,无论哪个字段包含无效输入。

我以为我可以这样做:

//../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 %}

{%if form_errors(form)不为null%} 不起作用,意思是:
当我在输入字段中的任何数据之前第一次显示创建表单时,错误警报显示尽管字段中没有数据。

我也尝试了 {%if form_errors(form)%} 这也没用,但反过来说,如果有错误也没关系,警报就不会秀。

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

4 个答案:

答案 0 :(得分:4)

你试试这个吗?

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

答案 1 :(得分: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 %}

答案 2 :(得分:1)

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

答案 3 :(得分:0)

{% if not form.vars.valid %}
<div class="alert alert-error">
    {{ form_errors(form) }}
</div>
{% endif %}

来自https://stackoverflow.com/a/17826389/511514