表格和必需属性

时间:2013-04-10 13:08:02

标签: forms symfony

我想知道一些事情。也许这是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 ......看起来已找到并提供此版本的解决方案,但问题仍然存在

1 个答案:

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