我非常深入了解一个复杂的Symfony2项目,其中包含许多实体和表格中的连接表等。但我在表单构建器中遇到了“多个”属性的奇怪问题。
基本上我有一个表单,用户可以在其中添加疾病到CRM,并且每种疾病都可以附加到特定的商店(取决于使用的语言)。用户可以在此表单中选择一个商店列表,这些值存储在连接表中。但是我只想要选择一个商店(即选择下拉列表)而不是多个选择列表,但是对多个属性使用false值会抛出一个错误,我将在稍后概述。
首先,这是我的Type.php文件中的buildForm()代码:
$builder->add('name' , 'text');
$builder->add('description' , 'textarea');
$builder->add('store', 'entity',
array(
'class' => 'AppBundle:Store',
'empty_value' => 'Choose store',
'property' => 'name',
'multiple' => false,
));
$builder->add('save', 'submit', array(
'attr' => array(
'class' => 'btn btn-primary'
),
));
我的实体中商店字段的条目:
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Store", inversedBy="illness", cascade={"persist"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="store_id", referencedColumnName="id")
* })
*/
public $store;
但是,如果我在表单类型中使用了多个属性的false声明,则在提交表单时,我收到以下错误:
警告:spl_object_hash()要求参数1为对象,给定字符串
因为它看起来像是传递了选择框的文本值,而不是相关的实体。当设置为多重选择框(即设置为true)时,它可以正常工作并保持原样。
我的控制器代码:
$addIllness = new Illness();
$form = $this->createForm(new IllnessType($em), $addIllness);
$form->handleRequest($request);
if ($form->isValid()) {
$em->persist($addIllness);
$em->flush();
return $this->redirect($this->generateUrl('app_illness_table'));
}
将它作为一个多选框并不是世界末日,虽然我宁愿把它作为下拉选择,所以用户不能选择多个商店 - 而不是我必须添加错误信息或请注意告诉他们。
如果有人想知道为什么会这样,或者之前遇到过请告诉我,我将非常感激!
谢谢 迈克尔