Symfony 4.3 Multiple ChoiceType使用PATCH时只能添加值而不能删除

时间:2019-06-26 10:40:28

标签: symfony symfony-forms symfony-4.3

给出表格:

gtk.spinbutton

和实体:

Traceback (most recent call last):
  File "test4.py", line 33, in button1_clicked
    dialog = PopUp(self)
  File "test4.py", line 54, in __init__
    initiate()
  File "test4.py", line 60, in __init__
    num = int(self.var1.numfiles)
AttributeError: 'MainWindow' object has no attribute 'numfiles'

通过添加值提交表单时...一切正常。 但是,在删除值时...不会删除值,并且永远不会调用设置器。

奇怪的是,将form方法切换为GET可以解决此问题。

这是怎么回事?

---编辑---

这是一个重现此问题的控制器:

...
        $builder
            ->add('testArray', ChoiceType::class, [
                'choices' => ['ROLE_ADMIN' => 'ROLE_ADMIN', 'ROLE_USER' => 'ROLE_USER'],
                'expanded' => true,
                'multiple' => true
            ])
        ;

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => TestEntity::class,
            'csrf_protection' => false,
            'method' => 'PATCH'
        ]);
    }

...

----编辑----

使用POST进行测试,效果很好。但是使用PATCH失败。所有其他字段将更新。并添加到数组的作品。但是,从阵列中删除则不会。我已经在上面添加了相关的PATCH代码,并更新了标题以澄清问题。

2 个答案:

答案 0 :(得分:0)

我不确定这是否是整个问题,但是在处理表单提交时,您并没有保留该实体。

allowClear={true}

通常是书面的

$this-getDoctrine()->getManager()->flush();

请参见https://symfony.com/doc/current/best_practices/forms.html#handling-form-submits

答案 1 :(得分:0)

对于数组,PATCH似乎模棱两可,并且有多种处理发送数据的方法。

Symfony在调用PATCH时将检测到$clearMissing而不是submit()(不要清空实​​体中数据中缺失的字段)。说到数组,这是模棱两可的。

为解决此问题,我不再使用PATCH更新用户实体,而是转向了此解决方案Symfony2: Edit user without having password

基本上使用两种不同的FormType来创建用户,另一种来编辑用户。每种表单类型使用不同的验证组。允许编辑用户而无需提交或清除用户密码。