使用两个选项filed创建表单

时间:2015-07-07 08:57:50

标签: symfony doctrine-orm

我想创建两个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;
}

1 个答案:

答案 0 :(得分:2)

我在这里看到三个问题(2个主要,1个未成年人):

  • (meta ...)

这将返回$this->getDoctrine()->getRepository('ModelBundle:Deliveries')array个对象。 Symfony2无法确定标签所需的文字表示,除非您实施Deliveries主要

此外,__toString()将以数字方式编入索引。表单元素的值将是array0等......这可能会导致一些莫名其妙的行为和令人头疼的问题。您应该考虑返回使用对象ID作为其键的数组。 (次要问题

  • 1

打了几次这堵墙。 'data' => ''属性将覆盖所有内容和任何内容,无论是默认实体成员值还是来自data的值。使用时要小心;)(专业

希望这会有所帮助......