Symfony 2.1 Twig中form_errors无法显示全部表单错误的求助
解决Symfony 2.1 Twig中
form_errors(form)无法显示全部表单错误的问题 我之前在Symfony 2.1开发时也碰到过一模一样的问题,当时折腾了好一会儿才搞明白根源——默认情况下,form_errors(form)只会渲染「表单级别」的错误,而字段本身的错误是绑定到对应字段上的,不会被这个方法抓取到。你的14处错误里,7处是表单级错误,剩下7处都是字段级错误,所以才会只显示一半。
下面给你几个实用的解决办法:
方法一:遍历所有字段,逐个输出错误
这是最直接的方式,手动遍历表单的所有子字段,分别调用form_errors()来输出每个字段的错误。在Twig模板里这么写:
{# 先输出表单级错误 #} {{ form_errors(form) }} {# 遍历所有字段,输出字段级错误 #} {% for child in form.children %} {{ form_errors(child) }} {% endfor %}
如果你的表单里有嵌套子表单,记得要递归遍历子表单的children,或者针对特定子表单单独处理。
方法二:通过错误映射将字段错误转移到表单级别
如果你希望所有错误都通过form_errors(form)统一输出,可以在表单类里配置error_mapping选项,把指定字段的错误映射到表单根级别。比如在表单类的setDefaultOptions方法里添加:
use Symfony\Component\OptionsResolver\OptionsResolverInterface; public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'error_mapping' => array( // 把field1的错误映射到表单本身 'field1' => '[.]', // 继续添加需要映射的字段 'field2' => '[.]', // ... ), )); }
这里的[.]是Symfony的特殊语法,代表表单的根级别。配置后,指定字段的错误就会被归类到表单级,form_errors(form)就能捕获到它们了。
方法三:检查字段渲染方式
如果你的字段是用form_widget()单独渲染的,记得要在对应位置加上form_errors(field),比如:
{{ form_label(form.fieldName) }} {{ form_errors(form.fieldName) }} {# 这里输出该字段的错误 #} {{ form_widget(form.fieldName) }}
这种方式适合需要把错误显示在对应字段旁边的场景,用户体验也更好。
内容的提问来源于stack exchange,提问作者Akhmed
相关产品推荐
相关产品推荐

