2013-04-10 40 views
0

我在想些什么。也许是在Symfony的一个错误,我不知道:表单和必填属性

假设一个产品对象:

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工作...它看起来像一个已经找到解决办法,并与该版本提供,但问题仍然

回答

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 
      ));