【问题标题】:symfony2 using validation groups in formsymfony2 在表单中使用验证组
【发布时间】:2011-09-06 15:35:30
【问题描述】:

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

/**
 * @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()
    {
        ...
    }
}

在控制器中我绑定请求并调用 $form->isValid()

但是如何定义validation_group呢?

【问题讨论】:

  • how to define the validation_group 是什么意思?您的意思是动态更改值foobar?或者是其他东西?另外请注意,它应该是validation_groups 而不是validation_group
  • 没有。我只是不知道表单类“MyType”和 $form->isValid()(在控制器中)和 validation_groups 是如何一起工作的。 isValid 没有参数可以通过验证组...

标签: forms validation symfony


【解决方案1】:

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

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

【讨论】:

  • 这是正确答案。 OP 不起作用的原因是因为一个错字:它是复数形式:'validation_groups'
【解决方案2】:

我遇到了完全相同的问题。我就是这样解决的……

// Entity
$employee = new Employee();

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

希望对你有帮助!

【讨论】:

  • 我认为这将解决我所有的问题,但它不会删除 required="required" symfony 正在添加到字段中,但如果我删除它们,它会按我的预期工作,考虑到我传入的组 - 非常烦人。 1 条注释,我相信它应该是 array('validation_groups' => array("registration", "another_group"))
【解决方案3】:

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

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

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

【讨论】:

  • 是的,我阅读了文档。但我想按照推荐使用表单类。并且使用 createFormBuilder 我必须 ->add() 表单字段。但我想使用我的表单类“MyType”
【解决方案4】:

对我来说,在 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')
    ));
}

【讨论】:

    【解决方案5】:

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

    在这篇文章中,我将通过一个订单表单的例子来展示如何在 symfony 中使用验证组,它应该提供使用单独的账单和送货地址的可能性。这包括 3 个步骤:

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

    【讨论】:

    • 感谢提示,刚刚添加了一个简短的概要
    • 链接给500
    【解决方案6】:

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

    // MyCustomType.php
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'validation_groups' => function (FormInterface $form) {
                $data = $form->getData();
    
                if (Client::TYPE_PERSON == $data->getType()) {
                    return array('person');
                }
    
                return array('company');
            },
        ));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      相关资源
      最近更新 更多