Symfony 3.4 - form_errors表单不显示主题

Maj*_*ons 5 php forms symfony twig fosuserbundle

编辑:做一些挖掘,看起来我的问题源于我正在创建的表单建立在FOSUserBundle的注册表单之上.为什么这是一个问题?因为如果表单无效,它们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 %}
Run Code Online (Sandbox Code Playgroud)

我在表单模板中引用它:

{% form_theme form 'Form/errors.html.twig' %}
Run Code Online (Sandbox Code Playgroud)

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

{{ form_errors(form) }}
Run Code Online (Sandbox Code Playgroud)

但是,当我故意向表单输入提供不正确的数据并尝试提交时,不会出现错误div.由于存在6个验证错误,因此提交失败,但HTML源中未显示错误.

看看文档,我认为我做得对,但我显然错过了一些东西.

Joh*_*rit 3

您有两个问题,您必须解决这两个问题才能使表单验证正常工作。

第一个问题:

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

第二个问题:

第二个问题是您可能没有包含正确的模板。我已经数不清有多少次我遇到同样的问题了。您可能有 3 或 4 个包含 html/twig 代码的模板,<form>但 Symfony 实际上只使用其中的 1 或 2 个。将您的代码添加到其中的每一个中,并确保您的 Twig 块不会被其他表单块覆盖。

另请记住,每次更改模板后,您必须清理应用程序缓存 ( ) 和浏览器缓存。php bin/console cache:clean -e prod您可能已经完成了所有正确的操作,并且该死的缓存正在显示缓存的结果。 最后一个建议:使用浏览器开发人员工具。您通常会发现工具控制台中显示大量信息和错误。