Symfony 3 子表单作为数组而不是实体提交
Symfony 3 subform submitted as array instead of entity
我正在将项目从 Symfony 2 转换到 Symfony 3,运行 遇到了问题。我有一个事件实体,它有一个 TwitterSearch 实体,它由 Event.php 中的以下内容定义:
/**
* @ORM\ManyToOne(targetEntity="TwitterSearch", cascade={"persist"})
* @ORM\JoinColumn(name="twitter_search_id", referencedColumnName="id")
*/
private $twitterSearch;
这就是我在 EventType 中设置关系的方式:
$builder->add('twitterSearch', TwitterSearchType::class, array(
'required'=>false,
));
这是提交表单时来自控制器的代码:
$entity = new Event();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$entity = $form->getData();
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
}
这曾经在 Symfony 2 中有效,但现在当提交表单时会抛出以下错误:
Expected value of type "TwitterSearch" for association field "Event#$twitterSearch"
, got "array" instead.
我调试了代码,事件的 twitterSearch 属性是数组。有谁知道为什么它不再将其转换为 TwitterSearch 的实例?
改用EntityType。
示例:
$builder->add('twitterSearch', EntityType::class, array(
'class' => TwitterSearch::class,
'choice_label' => 'name',
));
我正在将项目从 Symfony 2 转换到 Symfony 3,运行 遇到了问题。我有一个事件实体,它有一个 TwitterSearch 实体,它由 Event.php 中的以下内容定义:
/**
* @ORM\ManyToOne(targetEntity="TwitterSearch", cascade={"persist"})
* @ORM\JoinColumn(name="twitter_search_id", referencedColumnName="id")
*/
private $twitterSearch;
这就是我在 EventType 中设置关系的方式:
$builder->add('twitterSearch', TwitterSearchType::class, array(
'required'=>false,
));
这是提交表单时来自控制器的代码:
$entity = new Event();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$entity = $form->getData();
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
}
这曾经在 Symfony 2 中有效,但现在当提交表单时会抛出以下错误:
Expected value of type "TwitterSearch" for association field "Event#$twitterSearch"
, got "array" instead.
我调试了代码,事件的 twitterSearch 属性是数组。有谁知道为什么它不再将其转换为 TwitterSearch 的实例?
改用EntityType。
示例:
$builder->add('twitterSearch', EntityType::class, array(
'class' => TwitterSearch::class,
'choice_label' => 'name',
));