symfony2使用表单中的验证组

时间:2011-09-06 15:35:31

标签: forms validation symfony

我有一个带有属性的实体:

/**
 * @var string $name
 *
 * @Assert\NotBlank(groups={"foobar"})
 * @ORM\Column(name="name", type="string", length=225, nullable=false)
 */
private $name;

表格:

class MyType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('name');
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => '...',
            'validation_group' => array('foobar'),
        );
    }

    public function getName()
    {
        ...
    }
}

在Controller中,我绑定了Request并调用$ form-> isValid()

但是如何定义validation_group?

6 个答案:

答案 0 :(得分:13)

从FormType类内部,您可以通过设置默认选项来定义与该类型关联的验证组:

public function getDefaultOptions(array $options)
{
    return array(
        'data_class' => 'Acme\MyBundle\Entity\MyEntity',
        'validation_groups' => array('group1', 'group2'),
    );
}

答案 1 :(得分:13)

我有完全相同的问题。我这样解决了......

// Entity
$employee = new Employee();

// Form creation
$form = $this->createForm(new EmployeeForm(), $employee, array('validation_groups'=>'registration'));

我希望有所帮助!

答案 2 :(得分:10)

在控制器中构建表单时,将“validation_groups”项添加到options数组中:

$form = $this->createFormBuilder($users, array(
    'validation_groups' => array('foobar'),
))->add(...)
;

在symfony2书的表单页面中对其进行了描述:http://symfony.com/doc/current/book/forms.html#validation-groups

答案 3 :(得分:2)

对我来说,在symfony 2.1上,我通过在validation_groups中添加'Default'来解决它:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Acme\MyBundle\Entity\MyEntity',
        'validation_groups' => array('Default', 'registration')
    ));
}

答案 4 :(得分:1)

我发了一篇与此问题相关的博文:http://marcjuch.li/blog/2013/04/21/how-to-use-validation-groups-in-symfony/

在这篇文章中,我将展示如何使用symfony中的验证组和订单表格的示例,该订单可以提供使用单独的结算和发货地址的可能性。这包括3个步骤:

  • 运输相关表单字段的组验证约束
  • 确定应用哪些验证限制,具体取决于 提交表单中的复选框值
  • 如果选中复选框,则将数据从非送货字段复制到送货字段 未选中

答案 5 :(得分:0)

您还可以动态定义验证组:

ItemGroup_Item