创建包含CollectionType的表单时如何传递默认数据?

时间:2016-03-04 12:00:26

标签: forms symfony symfony-forms

我正在尝试创建多个导入数据,因此我需要在同一个地方使用多个表单集合。我可以使用集合类型来做到这一点。

我创建的图片类有一个字段:图片,它是这样的arrayCollection类型:

class Pictures {

protected $pictures;


public function __construct()
{
    $this->pictures = new \Doctrine\Common\Collections\ArrayCollection();
}

public function addPicture(Picture $picture)
{
    $this->pictures[] = $picture;
    return $this;
}

public function removePicture(Picture $picture)
{
    $this->pictures->removeElement($picture);
}

public function getPictures()
{
    return $this->pictures;
}

}

接下来,我创建了带有集合到pictureType的图片表单。

$builder
        ->add('pictures', 'collection', array(
            'prototype' => false,
            'by_reference' => true,
            'entry_type'   => PictureType::class,
            'options' => array('label' => false)) 
        )
    ;

接下来,我有图片实体,包括字段,例如名称,宽度,高度,图像(没关系)。

所以我的PictureType是一个简单的表格,与实体(标准)相同。

现在我尝试渲染此表单并在控制器中添加一些图片(而不是从数据库中添加)。然后我创建了Picture Object,然后我将它添加到pictures-> addPicture($ picture);

$pictures = new Pictures();
    foreach($data as $d){            
        $picture = new Picture();            
        $picture->setName($d['title']);
        $picture->setImage($d['thumbnail_400_url']);
        $picture->setWidth($d['width']);
        $picture->setHeight($d['height']);
        $pictures->addPicture($picture);          
    }
    $form = $this->createForm('PicturesType', $pictures, array(
            'action' => $this->generateUrl('dashboard_fotolia_save'),
            'method' => 'POST',
        ));

之后如果渲染表格没问题。我可以看到并改变价值观。

但提交表单数据后丢失。我希望数据存储在响应中但不是:(

我只想用它来创建新对象。你能帮帮我吗?

表单错误:此表单不应包含额外字段

1 个答案:

答案 0 :(得分:1)

实际上,您的PicturesType似乎拥有pictures字段,因为您添加了以下字段:

$builder->add('pictures', 'collection', ...

所以你得到了一个表单类型,其中包含一系列数据和一个键'图片'对应的字段。

您可能希望通过以下方式进行设置:

$form = $this->createForm('PicturesType', array('pictures' => $pictures), ...