编辑:进行一些挖掘,看来我的问题源于我正在创建的表单是基于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 %}
我在表单模板中引用以下内容:
{% form_theme form 'Form/errors.html.twig' %}
然后我尝试用一个简单的方法调用它:
{{ form_errors(form) }}
但是,当我有意向表单输入提供不正确的数据并尝试提交时,没有错误div存在。由于存在6个验证错误,提交失败,但HTML源中没有显示错误。
看着documentation,我认为我做得对,但显然我缺少一些东西。
答案 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;
}