Symfony 3.3 - 无法使用 EntityType select 空值
Symfony 3.3 - Unable to select empty value using EntityType
我有以下问题。我有一个国家/地区表单,其中我使用 EntityType 来 select 来自 User 实体列表的联系人。 Symfony 使用空选项正确呈现 select。不需要联系人,所以空选项可以select编辑。因此,如果我 select 空选项,我希望将空字符串(在请求中发送)转换为 null。根据 EntityType Symfony documentation 设置 'empty_data' => null
即可。这适用于 创建表单 。但是,如果我已经在 create form 中设置了联系人,并且我想在 edit formnull 中将联系人设置为 null =48=] , null 被忽略并且值不变。从用户 A 更改为用户 B 工作正常。有人知道为什么它没有改变吗?
来自 CountryType.php:
的 buildForm 方法的一部分
$builder->add('contactPerson', EntityType::class, [
'class' => 'AppBundle:User',
'choice_label' => 'username',
'empty_data' => null,
'required' => false,
// 'placeholder' => '' - Can be ommited, empty value is default
]);
部分Country.orm.yml:
manyToOne:
contactPerson:
targetEntity: AppBundle\Entity\User
joinColumn:
name: contact_person
referencedColumnName: id
onDelete: RESTRICT
nullable: true
fetch: EAGER
editAction 方法 CountryController.php:
public function editAction(Request $request, $id)
{
/** @var CountryService $countryService */
$countryService = $this->get('app.country');
/** @var Country $country */
$country = $countryService->findById($id);
if (!$country) {
$this->addFlash('error', 'back.country.not_found');
return $this->redirectToRoute('back_country_list');
}
$form = $this->createForm(
CountryType::class,
$country,
[
'edit_action' => true
]
);
$form->handleRequest($request);
if ($form->isValid()) {
$countryService->edit($country);
$this->addFlash('success', 'back.country.edited');
return $this->redirectToRoute('back_country_edit', ['id' => $id]);
}
return $this->render(
'AppBundle:back\country:edit.html.twig',
[
'form' => $form->createView()
]
);
}
POST 请求的内容如下:
"contactPerson" => ""
但是如果我在$form->handleRequest($request)
之后的某处输入die(dump($country->getContactPerson())
,值仍然设置为User,而不是null.
感谢您的帮助!
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
使用以上 class 并尝试以下代码
$builder->add('contactPerson', EntityType::class, [
'class' => 'AppBundle:User',
'choice_label' => 'username',
'required' => false,
'placeholder' => 'Please choose a contact person',
'empty_data' => null,
]);
这让我大吃一惊,但我可能在 Symfony 中发现了一个错误。有关详细信息,请参阅错误报告:https://github.com/symfony/symfony/issues/25181
我有以下问题。我有一个国家/地区表单,其中我使用 EntityType 来 select 来自 User 实体列表的联系人。 Symfony 使用空选项正确呈现 select。不需要联系人,所以空选项可以select编辑。因此,如果我 select 空选项,我希望将空字符串(在请求中发送)转换为 null。根据 EntityType Symfony documentation 设置 'empty_data' => null
即可。这适用于 创建表单 。但是,如果我已经在 create form 中设置了联系人,并且我想在 edit formnull 中将联系人设置为 null =48=] , null 被忽略并且值不变。从用户 A 更改为用户 B 工作正常。有人知道为什么它没有改变吗?
来自 CountryType.php:
的 buildForm 方法的一部分$builder->add('contactPerson', EntityType::class, [
'class' => 'AppBundle:User',
'choice_label' => 'username',
'empty_data' => null,
'required' => false,
// 'placeholder' => '' - Can be ommited, empty value is default
]);
部分Country.orm.yml:
manyToOne:
contactPerson:
targetEntity: AppBundle\Entity\User
joinColumn:
name: contact_person
referencedColumnName: id
onDelete: RESTRICT
nullable: true
fetch: EAGER
editAction 方法 CountryController.php:
public function editAction(Request $request, $id)
{
/** @var CountryService $countryService */
$countryService = $this->get('app.country');
/** @var Country $country */
$country = $countryService->findById($id);
if (!$country) {
$this->addFlash('error', 'back.country.not_found');
return $this->redirectToRoute('back_country_list');
}
$form = $this->createForm(
CountryType::class,
$country,
[
'edit_action' => true
]
);
$form->handleRequest($request);
if ($form->isValid()) {
$countryService->edit($country);
$this->addFlash('success', 'back.country.edited');
return $this->redirectToRoute('back_country_edit', ['id' => $id]);
}
return $this->render(
'AppBundle:back\country:edit.html.twig',
[
'form' => $form->createView()
]
);
}
POST 请求的内容如下:
"contactPerson" => ""
但是如果我在$form->handleRequest($request)
之后的某处输入die(dump($country->getContactPerson())
,值仍然设置为User,而不是null.
感谢您的帮助!
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
使用以上 class 并尝试以下代码
$builder->add('contactPerson', EntityType::class, [
'class' => 'AppBundle:User',
'choice_label' => 'username',
'required' => false,
'placeholder' => 'Please choose a contact person',
'empty_data' => null,
]);
这让我大吃一惊,但我可能在 Symfony 中发现了一个错误。有关详细信息,请参阅错误报告:https://github.com/symfony/symfony/issues/25181