我想知道一些事情。也许这是Symfony的一个错误,我不知道:
假设一个Product对象:
class Product
{
private $id;
private $name;
private $price;
private $description;
}
我用这个对象构建一个表单。这是我的验证文件:
myVendor\myBundle\Entity\Product:
properties:
name:
- NotBlank: ~
price:
- NotBlank: ~
这是我的formbuilder:
$builder->add('name', 'text', array('label' => $this->translator->trans('product.demo.name')));
$builder->add('price', 'money', array(
'label' => $this->translator->trans('product.demo.price'),
'invalid_message' => $this->translator->trans('product.demo.validation.price.error')
));
$builder->add('description', 'textarea', array('label' => $this->translator->trans('product.demo.description')));
生成表单时,字段的3个区域具有必需属性...甚至不需要描述。
如果我停用HTML5,它会运行良好,因为Symfony会查看验证文件并看到该描述字段不是必需的。
但是,如果激活了HTML5,则由于所需属性而需要描述值。
这是Symfony在默认情况下生成具有必需属性的字段的错误......
可以修复吗?
谢谢
PS:我使用Symfony 2.2 ......看起来已找到并提供此版本的解决方案,但问题仍然存在
答案 0 :(得分:3)
默认情况下,每个Symfony2表单类型都将required
选项设置为true
,
无论您在验证中有什么Assert
。
http://symfony.com/doc/master/book/forms.html#field-type-options
所需选项只是一个“很好的”功能,并不执行真正的服务器端验证。这是验证Assert
的作用。
只需在您的说明中添加required=false
:
$builder->add('description',
'textarea', array(
'label' => $this->translator->trans('product.demo.description'),
'required' => false
));