我正在使用来自 http://bootstrap.braincrafted.com/的 BootstrapCollection 和 VichUploader https://github.com/dustin10/VichUploaderBundle
除了删除功能外,它工作正常。如果我尝试删除一个子项(PDF 文件),则只有 name 属性为空,但不会删除整行/实体。
父表单类型:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add(
'files',
BootstrapCollectionType::class,
[
'type' => NewsPdfFileType::class,
'required' => false,
'allow_add' => true,
'allow_delete' => true,
'label' => 'PDF',
'translation_domain' => 'entities',
]
);
}
子窗体类型:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'pdfFile',
VichFileType::class,
[
'required' => false,
'download_link' => true,
'allow_delete' => true,
'label' => 'PDF'
]
);
}
这是我的关系:
父实体 NewsPdf:
class NewsPdf
{
/**
* @ORM\Id()
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="Brightside\CMSBundle\Entity\News")
*/
private $news;
/**
* @ORM\OneToMany(targetEntity="Mandant\CMSPlusBundle\Entity\NewsPdfFile", mappedBy="newsPdf", cascade={"persist"})
*/
private $files;
.
.
.
.
子实体 NewsPdfFile:
class NewsPdfFile
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Mandant\CMSPlusBundle\Entity\NewsPdf", inversedBy="files")
* @JoinColumn(name="newsPdf_id", referencedColumnName="id")
*/
private $newsPdf;
/**
* @var File
*
* @Vich\UploadableField(mapping="news_pdf", fileNameProperty="pdfName")
*
*/
private $pdfFile;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*
* @var string
*/
private $pdfName;
/**
* @ORM\Column(type="datetime")
*
* @var \DateTime
*/
private $updatedAt;
.
.
.
在我的父实体中,我已经有一个删除功能:
/**
* @param NewsPdfFile $file
*/
public function removeFile(NewsPdfFile $file)
{
$this->files->removeElement($file);
}
但我无法让它工作。当我尝试删除元素时(在我的 formType 中有 allow_delete 选项)只有“pdfName”属性将为空。我究竟做错了什么?