编辑:进行一些挖掘,看起来我的问题源于这样一个事实,即我正在创建的表单是基于 FOSUserBundle 的注册表单构建的。为什么这是一个问题?因为虽然他们的 RegistrationController 会在表单无效时抛出 REGISTRATION_FAILURE 事件,但看起来该事件没有监听器。因此,无效状态除了根本不被系统处理之外实际上并没有做任何事情。它甚至不返回表单(有错误)。
我想使用一个相对简单的表单主题,以便在表单顶部的 block 中显示表单错误:
{% 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 ,我认为我做对了,但我显然遗漏了一些东西。
最佳答案
您有两个问题,您必须同时解决这两个问题才能使表单验证正常工作。
第一个问题:
第一个问题是监听器不工作。如果你故意在表单数据中出错并且表单验证没有启动,那么你将永远不会看到 form_errors 模板。您必须查看 FOSUserBundle 的文档。
首先,检查您是否正确启用/配置了 validation.yml。
其次,检查生成表单的 PHP 类。确保验证标准设置正确。
现在,检查表单是否产生错误的最可靠方法是 {{dump(form)}}在 Twig 模板中。它将显示表单的所有数据,包括错误。
继续努力,直到你设法看到一些错误。否则无法进行下一步。
第二个问题:
第二个问题是您可能没有包含正确的模板。我无法计算我有多少次遇到同样的问题。您可能有 3 或 4 个包含 <form> 的 html/twig 代码的模板但 Symfony 实际上使用了其中的 1 或 2 个。将您的代码添加到其中的每一个,并确保您的 Twig block 没有被其他表单 block 覆盖。
另请记住,每次更改模板后,您都必须清理应用程序缓存 ( php bin/console cache:clean -e prod ) 和浏览器缓存。你可能做对了一切,该死的缓存正在显示缓存的结果。
最后一条建议:使用浏览器开发者工具。您经常会发现很多信息和错误显示在工具的控制台中。
关于php - Symfony 3.4 - form_errors 表单主题不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53861607/
我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib
我正在使用这个:4.times{|i|assert_not_equal("content#{i+2}".constantize,object.first_content)}我之前声明过局部变量content1content2content3content4content5我得到的错误NameError:wrongconstantnamecontent2这个错误是什么意思?我很确定我想要content2=\ 最佳答案 你必须用一个大字母来调用ruby常量:Content2而不是content2。Aconstantnamestart
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak
我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser
我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe
我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas
我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不
我在en:语言环境中有一个字符串display_device:toplay:getplayer冒号给我的错误是cannotloadtranslationsfromC:/DocumentsandSettings/rajg/discoveryaws/branches/internationalization/config/locales/en.yml,expectedittoreturnahash,butdoesnot我怎样才能让它工作? 最佳答案 如果你用这样的引号将它括起来,你可以在你的字符串中转义冒号(和其他“重要”字符):dis
我在事件管理员编辑页面中有嵌套资源,但我只想允许管理员编辑现有资源的内容,而不是添加新的嵌套资源。我的代码看起来像这样:formdo|f|f.inputsdof.input:authorf.input:contentf.has_many:commentsdo|comment_form|comment_form.input:contentcomment_form.input:_destroy,as::boolean,required:false,label:'Remove'endendf.actionsend但它在输入下添加了“添加新评论”按钮。我怎样才能禁用它,并只为主窗体保留f.ac