Symfony BootstrapCollection с VichUploader - удаление элемента не работает
Я использую BootstrapCollection из http://bootstrap.braincrafted.com/ с VichUploader https://github.com/dustin10/VichUploaderBundle
Работает нормально, кроме функции удаления. Если я пытаюсь удалить дочерний файл (PDF-файл), только свойство name будет пустым, но не вся строка / объект будет удален.
Родительский formType:
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',
]
);
}
Child FormType:
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;
.
.
.
.
Child Entity 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" будет пустым. Что я делаю неправильно?
1 ответ
Я нашел душу сам
Symfony не удаляет сущность из коллекции
Мне нужно изменить мою функцию удаления в родительской сущности:
/**
* @param NewsPdfFile $file
*/
public function removeFile(NewsPdfFile $file)
{
$this->files->removeElement($file);
$file->setPdfFile(null);
}
и orphanRemoval=true в аннотации OneToMany:
/**
* @ORM\OneToMany(targetEntity="Mandant\CMSPlusBundle\Entity\NewsPdfFile", mappedBy="newsPdf", cascade={"persist"}, orphanRemoval=true)
*/
private $files;