Symfony 3.4 - form_errors 表单主题不显示

Symfony 3.4 - form_errors form theme not displaying

编辑:进行一些挖掘,看起来我的问题源于这样一个事实,即我正在创建的表单是基于 FOSUserBundle 的注册表单构建的。为什么这是一个问题?因为如果表单无效,他们的 RegistrationController 会抛出 REGISTRATION_FAILURE 事件,但看起来事件没有侦听器。因此,无效状态除了根本不被系统处理之外实际上并没有做任何事情。它甚至没有 return 表格(有错误)。

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

{% 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 个验证错误,但没有错误是 displayed/in HTML 来源。

看着documentation,我觉得我做对了,但我显然遗漏了什么。

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

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

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

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

第一个问题:

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

第二题:

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

另请记住,每次更改模板后,您都必须清理 应用程序缓存 (php bin/console cache:clean -e prod) 和浏览器缓存。你可能做对了一切,该死的缓存正在显示缓存的结果。 最后一个建议:使用浏览器开发者工具。您经常会发现很多信息和错误显示在工具的控制台中。