Symfony 3.4-form_errors表单主题未显示

时间:2018-12-20 02:14:24

标签: php forms symfony twig fosuserbundle

编辑:进行一些挖掘,看来我的问题源于我正在创建的表单是基于FOSU​​serBundle的注册表单生成的。为什么这是一个问题?因为如果表单无效,虽然他们的RegistrationController会引发REGISTRATION_FAILURE事件,但看起来该事件没有监听器。因此,除了系统根本不处理无效状态之外,无效状态实际上不做任何事情。它甚至不返回表格(有错误)。

我想使用一个相对简单的表单主题,以便在表单顶部的块中显示表单错误:

{% form_theme form _self %}

{% block form_errors %}
    {% spaceless %}
        {% if errors|length > 0 %}
            <div class="errors pt-2 mb-2">
                <ul>
                    {% for error in errors %}
                        <li>{{ error.message }}</li>
                    {% endfor %}
                </ul>
            </div>
        {% endif %}
    {% endspaceless %}
{% endblock form_errors %}

我在表单模板中引用以下内容:

{% form_theme form 'Form/errors.html.twig' %}

然后我尝试用一​​个简单的方法调用它:

{{ form_errors(form) }}

但是,当我有意向表单输入提供不正确的数据并尝试提交时,没有错误div存在。由于存在6个验证错误,提交失败,但HTML源中没有显示错误。

看着documentation,我认为我做得对,但显然我缺少一些东西。

2 个答案:

答案 0 :(得分:2)

您有两个问题,必须解决这两个问题才能使表单验证生效。

第一个问题:

第一个问题是侦听器无法正常工作。如果您有意在表单数据中出错,并且没有启动表单验证,那么您将永远不会看到form_errors模板。您必须阅读FOSUserBundle的文档。 首先,检查您是否正确启用/配置了validation.yml。 其次,检查生成表单的PHP类。确保正确设置验证条件。 现在,检查表单是否产生错误的最可靠方法是在Twig模板中访问{{dump(form)}}。它将显示表单的所有数据,包括错误。 继续努力直到发现一些错误。否则,您将无法进行下一步。

第二个问题:

第二个问题是您可能未包括正确的模板。我无法数出我遇到相同问题的次数。您可能有3或4个模板,其中包含<form>的html / twig代码,但Symfony实际上使用了其中的1或2个模板。将代码添加到其中的每一个中,并确保您的Twig块未被其他表单块覆盖。

还请记住,在模板中进行每次更改后,您必须同时清理两者和应用程序缓存(php bin/console cache:clean -e prod)和浏览器缓存。您可能做对了所有事情,该死的缓存显示了缓存的结果。 最后一条建议:使用浏览器开发人员工具。通常,您会发现很多信息,并且错误信息会显示在工具的控制台中。

答案 1 :(得分:-4)

表格错误是什么? 对于抛出错误,您必须在您的实体上设置断言。 例如:

class User extend baseUser
{
    /**
     * @Assert\NotBlank
     */
    public $name;
}

有关更多信息:https://symfony.com/doc/current/validation.html