我想创建两个choces字段,因为如果我生成表单我有__toString()方法的问题,因为我需要传递给函数的字段。
/**
* @Route("/transport", name="transportAction")
* @Template("CoreBundle:Goods:transport.html.twig")
*/
public function transportAction()
{
$storageItems = new StorageItems();
$form = $this->createFormBuilder($storageItems)
->add('storageitems_to_deliveries', 'entity', [
'class' => 'ModelBundle:Deliveries',
'choices' => $storageItems->getStorageitemsToDeliveries()
])
->add('storageitems_to_strorage', 'entity', [
'class' => 'ModelBundle:Storages',
'choices' => $this->getDoctrine()->getRepository('ModelBundle:Storages')->findAll(),
//'property'=> 'secondStorage'
])
->getForm();
return array(
'form' => $form->createView()
);
}
结果我有错误
警告:非法偏移类型
我做错了什么?怎么修好了?
P.S
class Deliveries
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Items", inversedBy="items_to_deliveries")
* @ORM\JoinColumn(name="items_to_deliveries_id", referencedColumnName="id", nullable=false)
*/
private $deliveries_to_items;
/**
* @ORM\ManyToOne(targetEntity="Workers", inversedBy="workers_to_deliveries")
* @ORM\JoinColumn(name="workers_to_deliveries_id", referencedColumnName="id", nullable=false)
*/
private $deliveries_to_workers;
/**
* @var ArrayCollection
* @ORM\OneToMany(targetEntity="StorageItems", mappedBy="storageitems_to_deliveries", cascade={"remove"})
*/
private $deliveries_to_storageitems;
public function __construct()
{
$this->deliveries_to_storageitems = new ArrayCollection();
}
public function __toString()
{
return $this->deliveries_to_workers;
}
答案 0 :(得分:2)
我在这里看到三个问题(2个主要,1个未成年人):
(meta ...)
这将返回$this->getDoctrine()->getRepository('ModelBundle:Deliveries')
个array
个对象。 Symfony2无法确定标签所需的文字表示,除非您实施Deliveries
(主要)
此外,__toString()
将以数字方式编入索引。表单元素的值将是array
,0
等......这可能会导致一些莫名其妙的行为和令人头疼的问题。您应该考虑返回使用对象ID作为其键的数组。 (次要问题)
1
打了几次这堵墙。 'data' => ''
属性将覆盖所有内容和任何内容,无论是默认实体成员值还是来自data
的值。使用时要小心;)(专业)
希望这会有所帮助......