加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Symfony2根据提交的数据形成验证组

发布时间:2020-12-13 22:04:36 所属栏目:PHP教程 来源:网络整理
导读:我有一些复杂的形式,有几个子表单,我希望能够根据主窗体中选择的单选按钮分别验证每个子表单.我希望通过验证组实现这一目标. 注意:我没有data_class模型,我使用数组. 这是我简化的表格: class MyType extends AbstractType{ public function buildForm(For
我有一些复杂的形式,有几个子表单,我希望能够根据主窗体中选择的单选按钮分别验证每个子表单.我希望通过验证组实现这一目标.

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

这是我简化的表格:

class MyType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder,array $options)
    {
        $builder->add('xxx','text',array(
                'constraints' => array(
                    new ConstraintsNotBlank(),),'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',array(
        'constraints' => array(
            new ConstraintsNotBlank(),'validation_groups' => array(
            'xxx',)
    ))
;

$builder->add('xxx',array(
        'constraints' => array(
            new ConstraintsNotBlank(array(
                'groups' => 'xxx'
            )),))
;

默认情况下,约束具有“默认”(大写)组,并且表单使用此组来验证是否未指定.如果您希望其他约束没有显式组进行验证,则指定的组将传递“默认”组.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读