【问题标题】:Symfony ignore validation about extra fieldsSymfony 忽略对额外字段的验证
【发布时间】:2015-06-22 21:17:36
【问题描述】:

我需要使用 angularJS 向表单动态添加具有不同名称和 id 的其他表单字段。在检查表单是否有效时,如何让 symfony 忽略这些字段?我无法将这些字段添加到构建器中,因为我不知道该字段的名称是什么。 我可以使用包含 ID 的表单字段命名,例如 field1field2field3 等。但如果是这样,我可以以某种方式设置该领域的模式吗?类似field*

【问题讨论】:

    标签: angularjs forms symfony


    【解决方案1】:

    尽管我同意@sepikas_antanas 的观点,但如果您非常想走这条路,您可以使用提交的数据添加未知的表单字段:

    class ExampleEntry extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $f = function(FormEvent $event) {
                $form = $event->getForm();
                $data = $event->getData();
                if (is_array($data)) {
                    foreach ($data as $name => $value) {
                        if (!$form->has($name)) {
                            // dunno you fields types 
                            $form->add($name, 'hidden');
                        }
                    }
                }
            };
            $builder->addEventListener(FormEvents::PRE_SET_DATA, $f);
            $builder->addEventListener(FormEvents::PRE_SUBMIT, $f);             
        }
    

    【讨论】:

      【解决方案2】:

      根据 symfony2 文档http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html

      您应该以这样一种方式组织您的应用程序:用户操作(添加表单字段的用户)将提交带有生成表单字段所需数据的表单:

      http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#cookbook-form-events-submitted-data

      Symfony2 表单生成只发生在服务器端,这是出于安全原因。

      忽略表单验证不是一个好习惯,我认为应该完全避免。

      【讨论】:

        猜你喜欢
        • 2015-06-12
        • 2019-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多