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;
}
您有两个问题,您必须同时解决这两个问题才能使表单验证正常工作。
第一个问题:
第一个问题是监听器不工作。如果您故意在表单数据中出错并且没有启动表单验证,那么您将永远看不到 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
) 和浏览器缓存。你可能做对了一切,该死的缓存正在显示缓存的结果。
最后一个建议:使用浏览器开发者工具。您经常会发现很多信息和错误显示在工具的控制台中。
编辑:进行一些挖掘,看起来我的问题源于这样一个事实,即我正在创建的表单是基于 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;
}
您有两个问题,您必须同时解决这两个问题才能使表单验证正常工作。
第一个问题:
第一个问题是监听器不工作。如果您故意在表单数据中出错并且没有启动表单验证,那么您将永远看不到 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
) 和浏览器缓存。你可能做对了一切,该死的缓存正在显示缓存的结果。
最后一个建议:使用浏览器开发者工具。您经常会发现很多信息和错误显示在工具的控制台中。