http://bootstrap.braincrafted.com/の BootstrapCollection を 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',
]
);
}
子フォームの種類:
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」プロパティのみが空になります。私は何を間違っていますか?