【问题标题】:Symfony Form Validation Choices Case InsensitiveSymfony 表单验证选择不区分大小写
【发布时间】:2018-04-28 22:08:28
【问题描述】:

关于 Symfony 3.3 中的表单级别验证,我试图弄清楚如何使它不区分大小写。它正在与一系列选择进行比较。

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('title', CollectionType::class, [
            'entry_type' => ChoiceType::class,
            'allow_add' => true,
            'allow_delete' => true,
            'entry_options'  => array(
                'choices'  => array(
                                "Sample Option",
                                "Sample Option 2",
                                "Sample Option 3",
                                "Sample Option 4"
                            )
            ),
            'error_bubbling' => false
        ]);

在选择项中的 entry_options 下是它用于表单验证的数组。

我想要做的是能够传递不区分大小写的值,例如“sample option”或“sample Option”,并使其通过表单级别的验证。

在此先感谢您提供任何帮助。

更新 - 正如 Kevin 所提到的,我有兴趣弄清楚在框架中应该如何/在何处更新它。

【问题讨论】:

  • 在比较之前将选项和值转换为小写。
  • @svgrafov 看起来这个问题是在问如何或在哪里在 Symfony Forms 的上下文中,你可以将值转换为小写。

标签: php symfony validation


【解决方案1】:

除了 DataTransformers 之外,还有另一种方法值得考虑。 Form Events。特别是FormEvents::PRE_SUBMIT

来自Symfony Docs

FormEvents::PRE_SUBMIT 事件在 Form::submit() 方法的开头调度。

可用于:

  • 在将数据提交到表单之前更改请求中的数据;
  • 在将数据提交到表单之前添加或删除表单域。

这将有效地先于任何表单级验证。

【讨论】:

    【解决方案2】:

    如果其他人有类似的问题,这里最终发生的事情是很难让数据转换器使用 CollectionType 和 ChoiceType 进行转换。

    我没有使用 CollectionType,而是将其更改为 TextType。这通过了数据转换器,能够得到想要的结果。

    $builder->add('title', TextType::class);
    

    【讨论】:

      猜你喜欢
      • 2014-05-24
      • 1970-01-01
      • 2021-08-27
      • 2011-05-16
      • 1970-01-01
      • 2020-08-02
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多