我正在尝试创建多个导入数据,因此我需要在同一个地方使用多个表单集合。我可以使用集合类型来做到这一点。
我创建的图片类有一个字段:图片,它是这样的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',
));
之后如果渲染表格没问题。我可以看到并改变价值观。
但提交表单数据后丢失。我希望数据存储在响应中但不是:(
我只想用它来创建新对象。你能帮帮我吗?
表单错误:此表单不应包含额外字段
答案 0 :(得分:1)
实际上,您的PicturesType
似乎拥有pictures
字段,因为您添加了以下字段:
$builder->add('pictures', 'collection', ...
所以你得到了一个表单类型,其中包含一系列数据和一个键'图片'对应的字段。
您可能希望通过以下方式进行设置:
$form = $this->createForm('PicturesType', array('pictures' => $pictures), ...