为什么Symfony2窗体显示默认错误值,尽管验证?
问题描述:
我正在继续学习Symfony2,并发现新的“问题”!为什么Symfony2窗体显示默认错误值,尽管验证?
让我来描述这个问题。 我有一个类构造了一个Doctrine实体的表单。它与this page of the official docs中描述的注册表示例相同。唯一的区别是我使用Doctrine而不是MongoDB。
现在,我增加了以下字段插入用户类
/**
* @Assert\Type(type="integer", message="Not an integer.")
* @ORM\Column(type="smallint", name="num")
*
* @var Smallint $num
*
*/
protected $num;
然后,我更新功能buildForm在类的UserType通过添加下列行:
public function buildForm(FormBuilder $builder, array $options)
{
...
$builder->add('num', 'integer', array(
'label' => 'Insert a number',
));
}
这里是问题。尽管我通过注释提供了自定义消息,但是对于字段_number(即字符串值)的错误输入返回以下错误代码:“该值无效”而不是“非整数”。
有关此错误消息的错误解释的任何想法?
答
尝试增加
'invalid_message' => "Not an integer'
在buildForm
方法。
是的,我知道!但它不一样。这只是一个窍门,而不是问题的答案。事实上,通过遵循此解决方案,您将针对每个无效条目显示相同的错误消息。但是,通过注释您可以定义不同的错误类型。不管怎么说,还是要谢谢你。 – JeanValjean 2012-04-20 10:07:39
然后,您必须在'buildForm'方法中将该字段设置为文本。 '这个值无效'是因为抛出[IntegerToLocalizedStringTransformer]异常(https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Form/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformer。 php)在任何验证发生之前调用的'clientTransformer'。 – 2012-04-20 10:28:38
太棒了!你是对的! – JeanValjean 2012-04-20 10:37:59