给出表格:
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代码,并更新了标题以澄清问题。
答案 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来创建用户,另一种来编辑用户。每种表单类型使用不同的验证组。允许编辑用户而无需提交或清除用户密码。