【问题标题】:form_errors(form) symfony2 twigform_errors(form) symfony2 twig
【发布时间】:2014-03-26 02:04:16
【问题描述】:

使用 Symfony2.3.​​4 和 Twig 我敢打赌,这对任何人来说都很容易,但我就是做不到。
我试图只显示一个错误警报,始终显示相同的消息,始终在表单的开头,每次出现错误时,无论哪个字段包含无效输入。

我认为我可以这样做:

//../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) is not null %} 不工作,意思是:
当我在字段中输入任何数据之前第一次显示创建表单时,尽管字段中没有数据,但仍显示错误警报。

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

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

【问题讨论】:

标签: forms symfony error-handling twig


【解决方案1】:

你试过了吗?

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

【讨论】:

    【解决方案2】:

    尝试:

    {% 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 %}
    

    【讨论】:

    • 我尝试了您刚刚发布的内容,很抱歉,但 !== 会触发此错误“Unexpected token "operator" of value "="..."。然后我尝试了 != 并没有显示错误但不起作用:警报没有显示输入中有错误,回到开头......
    • {{dump(form_errors(form))}} 显示 'string '' (length=0)' 并且输入中有错误,我真的没有得到它
    • 如何将我的也设置为 true?抱歉,我现在才做网络编程几个月。
    • 我再次更新了我的答案,以展示如何在字段上设置错误冒泡
    • 我尝试了第二个选项,并使用您发布的代码进行了一些小调整,即:child.get(errors) throws "Method "get" for object "Symfony\ Component\Form\FormView" 不存在",我用 form_errors(child) 替换了它,我使用的 symfony 肯定有一些奇怪的东西,不管怎样,它最终按我的需要工作,感谢一百万,如果 (myRep >= 15) $me->thumbsUp();
    【解决方案3】:

    试试

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

    【讨论】:

      【解决方案4】:
      {% if not form.vars.valid %}
      <div class="alert alert-error">
          {{ form_errors(form) }}
      </div>
      {% endif %}
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多