php - 基于提交数据的 Symfony2 表单验证组

标签 php forms validation symfony

我有一些复杂的表单,有几个子表单,我希望能够根据在主表单中选择的单选按钮分别验证每个子表单。我想通过验证组来实现这一点。

注意:我没有data_class 模型,我使用数组。

这是我简化的表格:

class MyType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('xxx', 'text', array(
                'constraints' => array(
                    new Constraints\NotBlank(),
                ),
                'validation_groups' => array(
                    'xxx',
                )
            ))
        ;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'validation_groups' => function(FormInterface $form) {
                return array('xxx');
            },
        ));
    }
}

问题是没有触发对该字段的验证。

当这有效时,我可以轻松更改 setDefaultOptions 以根据提交的数据验证所需的组:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'validation_groups' => function(FormInterface $form) {
            $data = $form->getData();

            return array($data['type']);
        },
    ));
}

有什么想法吗?

最佳答案

您必须将验证组名称传递给约束,而不是在表单本身中。通过将组名称分配给表单,您可以指定要在验证中使用的约束。

替换

$builder->add('xxx', 'text', array(
        'constraints' => array(
            new Constraints\NotBlank(),
        ),
        'validation_groups' => array(
            'xxx',
        )
    ))
;

$builder->add('xxx', 'text', array(
        'constraints' => array(
            new Constraints\NotBlank(array(
                'groups' => 'xxx'
            )),
        ),
    ))
;

默认情况下,约束具有“默认”(大写)组,如果未指定,表单使用该组进行验证。如果您想要验证没有显式组的其他约束,请连同指定的组一起传递“默认”。

$resolver->setDefaults(array(
    'validation_groups' => function(FormInterface $form) {
        $data = $form->getData();

        return array($data['type'], 'Default');
    },
));

关于php - 基于提交数据的 Symfony2 表单验证组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13123900/

相关文章:

php - 如何防止未经授权的内容查看(php/js)

php - 将 PHP 进程作为守护进程运行,同时从后台安全地终止它

php - 购物车系统与数据库的连接

ruby-on-rails - 将 Bootstrap 类添加到 rails 表单 time_select 字段

validation - CakePHP 验证不起作用

php - Symfony Twig 样式表

PHP 表单发布并插入多行

forms - 如何允许用户在Grails中开发的博客文章中发表评论

javascript - 限制输入字段中的字符

jquery - resetForm() 不会调用取消突出显示