【问题标题】:How to use group sequence on form type in symfony forms?如何在 symfony 表单中的表单类型上使用组序列?
【发布时间】:2017-04-10 14:25:58
【问题描述】:

这个想法是首先验证所有必填字段是否不为空。如果提供了所有必需的数据,则验证输入的值是否正确。组序列的常见情况。但是,当我将new GroupSequence(["Basic", "Strict"]) 应用于validation_groups 选项时,即使所有字段都是空白的,表格也是有效的。如果validation_groups 值设置为["Basic", "Strict"],则表单已正确验证但具有所有约束,这不是我想要的。我做错了什么?

这是我的代码:

class MyType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
                ->add("name", null, [
                    "constraints" => new NotBlank(["groups" => ["Basic"]])
                ])
                ->add("phone", MyPhoneType::class, [
                    "constraints" => [
                        new NotBlank(["groups" => ["Basic"]]),
                        new PhoneNumber(["groups" => ["Strict"])
                    ]
                ])
                ->add("email", EmailType::class, [
                    "constraints" => [
                        new NotBlank(["groups" => ["Basic"]]),
                        new Email(["groups" => ["Strict"]]),
                    ],
                ])
            ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            "validation_groups" => new GroupSequence(["Basic", "Strict"])
        ]);
    }
}

【问题讨论】:

  • 您是否尝试将 GroupSequence 映射放在表单数据类对象中? (您的User 实体或任何DTO?)我在文档中找不到任何直接在表单中使用它的参考(或者您有任何使用链接)。
  • 你有没有尝试过像 "validation_groups" => ['Default',"Basic", "Strict"] ?
  • @goto,没有可用的 DTO 和实体,在这个项目中是不必要的。表单和验证组件在 Symfony 标准分发之外独立工作。
  • @Filchev,是的 - 结果相同。
  • 有一个错误打开:github.com/symfony/symfony/issues/22373

标签: php symfony symfony-forms symfony-2.8 symfony-validator


【解决方案1】:

我做错了什么?

这是 Symfony 2.8 版的已知bug,并且已修复较新版本。

但我也没有看到任何文档表明您可以在配置 validation_groups 选项时使用 GroupSequence

我认为在使用 Symfony 2.8 时,负责所有验证的 custom validator 是处理这种情况的最佳选择。

【讨论】:

    猜你喜欢
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    相关资源
    最近更新 更多