为什么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方法。

+0

是的,我知道!但它不一样。这只是一个窍门,而不是问题的答案。事实上,通过遵循此解决方案,您将针对每个无效条目显示相同的错误消息。但是,通过注释您可以定义不同的错误类型。不管怎么说,还是要谢谢你。 – JeanValjean 2012-04-20 10:07:39

+6

然后,您必须在'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

+0

太棒了!你是对的! – JeanValjean 2012-04-20 10:37:59