У меня есть два объекта Doctrine, которые имеют отношения «один ко многим», например:
Лицензия
class License { /** * Products this license contains * * @var \Doctrine\Common\Collections\ArrayCollection * @ORM\OneToMany(targetEntity="LicenseProductRelation", mappedBy="license") */ private $productRelations; }
LicenseProductRelation:
class LicenseProductRelation { /** * The License referenced by this relation * * @var \ISE\LicenseManagerBundle\Entity\License * @ORM\Id * @ORM\ManyToOne(targetEntity="License", inversedBy="productRelations") * @ORM\JoinColumn(name="license_id", referencedColumnName="id", nullable=false) */ private $license; }
И у меня есть эта форма для объекта лицензии:
class LicenseType extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { parent::buildForm($builder, $options); $builder->add('productRelations', 'collection', array('type' => new LicenseProductRelationType(), 'allow_add' => true, 'allow_delete' => true, 'prototype' => true, 'label' => 'Produkte')); } }
И эта форма для объекта LicenseProductRelation:
class LicenseProductRelationType extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { parent::buildForm($builder, $options); $builder->add('license', 'hidden'); } }
Формы и сущности, конечно, содержат другие поля, а не скопированы здесь, чтобы оставить сообщение относительно коротким.
Теперь, когда я передаю форму и привяжу запрос к форме в своем контроллере, я ожидаю, что вызов $license->getProductRelations()
вернет массив объектов LicenseProductRelation ( $license
– это объект, переданный в форму, таким образом, объект значения запроса записываются, когда я вызываю $form->bindRequest()
). Вместо этого он возвращает массив массивов, внутренние массивы, содержащие имена и значения полей формы.
Является ли это нормальным поведением или я сделал ошибку, которая каким-то образом препятствует компоненту формы понять, что License#productRelations
является массивом объектов LicenseProductRelation?