symfony:另一个表单内的表单获取作者(文章)

时间:2017-07-27 07:27:02

标签: symfony symfony-forms symfony-3.3

对象Article

 /**
 * @var Collection
 * @ORM\OneToMany(targetEntity="AppBundle\Entity\Photo", mappedBy="article", cascade={"persist"})
 */
private $photos;

对象Photo一边

/**
 * @var Article
 * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Article", inversedBy="photos")
 */
private $article;

我有一个对象Article的形式,其中包含对象Photo'形式如下:

//article form building
->add('photos', CollectionType::class, [
            'allow_delete' => true,
            'allow_add' => true,
            'entry_type' => PhotoType::class,
            'entry_options' => [
                'label' => false,
            ]
        ])

PhotoType我有

/**
 * {@inheritdoc}
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('image', ImageType::class, [
            'context' => 'photo',
        ])
        ->add('description')
        ->add('url')
...

但是如何在article表格中设置Photo字段?这样我就可以使用表格中定义的article_id列创建照片了吗?目前,在此表单中创建的所有照片都有article_id NULL,换句话说,他们没有设置

1 个答案:

答案 0 :(得分:1)

在您的加法器中,您需要设置ID:

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

    return $this;
}

并在您的表单中,您需要设置:'by_reference' => falsehttps://symfony.com/doc/current/reference/forms/types/collection.html#by-reference

  

类似地,如果您正在使用CollectionType字段,其中您的基础集合数据是一个对象(如与Doctrine的ArrayCollection一样),那么如果您需要加法器和移除器,则必须将by_reference设置为false(例如addAuthor()和removeAuthor( ))被称为。