【发布时间】:2012-05-27 19:47:35
【问题描述】:
我的 Symfony2 项目中有一个“Rating”实体的自定义表单类型。它有一个value字段,即integer。然后,我为这个实体创建了表单。下面是代码:
class RatingType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options){
$builder->add('value', 'hidden', array('data' => 113));
}
public function getDefaultOptions(array $options){
return array(
'data_class' => 'Acme\ArticleBundle\Entity\Rating',
);
}
public function getName() {
return 'spesax_productbundle_pratingtype';
}
}
当我在我的 html 页面中按下 提交 按钮时,表单未通过验证,并且屏幕上显示“not an integer”错误消息!
为什么 Symfony2 不将值 113 转换为整数?
我该怎么做才能解决这个问题?
【问题讨论】:
-
是否使用整数字段类型进行验证? (
$builder->add('value', 'integer'...) -
我是这么想的,但我不得不问。我试图找到一种方法将字段类型设置为
hidden和integer,但没有成功。你如何验证表格?你试过Type constraint吗? -
不,我只在实体 PHP 类中使用断言......但是,我认为实体
Rating内部的问题,因为字段value被映射为integer.因此,Symfony2 会自动验证渲染表单的隐藏字段提供的值,并无缘无故地声明它不是整数! -
我猜你使用 type="integer" 检查类型?尝试改用“数字”。由于 symfony 无法判断隐藏字段应该是整数还是字符串,因此它不进行类型转换。整数失败,因为“113”不是 PHP 中的整数。另一方面,numberic 检查是否可以将字符串转换为正确的整数,这种情况是正确的,因此应该正确验证。
-
@Sgoettschkes 太好了!你说的对!发布答案,我会投票并接受!丹克
标签: forms symfony hidden-field