symfony:另一个表单中的表单获得作者(文章)

symfony:另一个表单中的表单获得作者(文章),symfony,symfony-forms,symfony-3.3,Symfony,Symfony Forms,Symfony 3.3,目标物品有 侧面的实物照片 /** * @var Article * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Article", inversedBy="photos") */ private $article; 我有一个对象文章的形式,它包含对象照片的形式,如下所示: //article form building ->add('photos', CollectionType::class, [ 'all

目标物品有

侧面的实物照片

/**
 * @var Article
 * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Article", inversedBy="photos")
 */
private $article;
我有一个对象文章的形式,它包含对象照片的形式,如下所示:

//article form building
->add('photos', CollectionType::class, [
            'allow_delete' => true,
            'allow_add' => true,
            'entry_type' => PhotoType::class,
            'entry_options' => [
                'label' => false,
            ]
        ])
在我的照片里有


但是如何在照片表单中设置文章字段?这样我就可以用表中定义的article_id列创建照片了?目前,此表单中创建的所有照片的文章id均为空,换句话说,它们没有在您的加法器中进行设置,您需要设置id:

public function addPhoto(Photo $photo)
{
    if (!$this->photos->contains($photo)) {
        $this->photos[] = $photo;
        $photo->setDocument($this);
    }

    return $this;
}
在表单中,您需要设置:'by_reference'=>false

类似地,如果您使用CollectionType字段,其中您的基础收集数据是一个对象,如Doctrine的ArrayCollection,则如果您需要调用加法器和移除器(例如addAuthor和removeAuthor),则by_引用必须设置为false


非常感谢你,它起作用了。”顺便说一句,by_reference'=>false对我来说是强制性的
/**
 * {@inheritdoc}
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('image', ImageType::class, [
            'context' => 'photo',
        ])
        ->add('description')
        ->add('url')
...
public function addPhoto(Photo $photo)
{
    if (!$this->photos->contains($photo)) {
        $this->photos[] = $photo;
        $photo->setDocument($this);
    }

    return $this;
}