2013-04-10 73 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 
      ));