【发布时间】:2021-10-22 18:13:13
【问题描述】:
在调试完整的vendor/symfony/form/Form 数小时后,我只能发现FormEvents::SUBMIT 将我的null 值转换为Object。
这是我的代码。
$form = $this->createForm(PersonType::class, new Person());
$form->submit($request->request->all(), false);
if ($form->isSubmitted() && $form->isValid())
{
$em->persist($entity);
$em->flush();
return $entity;
}
return $form->getErrors(true, true);
然后我发送这个请求。
POST /api/persons/e3d90966-b2e7-4503-959f-da989c73c185
{
"name": {"firstName": "John", "lastName": "Doe"}
}
它将人名设置为John Doe。
现在我要清除它:
POST /api/persons/e3d90966-b2e7-4503-959f-da989c73c185
{
"name": null
}
然后瞧:名字仍然是John Doe。
我正在使用自定义类型:
class NameType extends AbstractType
{
private EntityManagerInterface $manager;
public function __construct(EntityManagerInterface $manager)
{
$this->manager = $manager;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder
->add('firstName', TextType::class)
->add('lastName', TextType::class)
;
$builder->addModelTransformer(new NameTransformer($this->manager));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Name::class,
'compound' => true
]);
}
}
并且通过以下方式使用:
$builder
->add('name', NameType::class)
;
更多信息:
【问题讨论】:
标签: php symfony symfony-forms symfony5