0

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」プロパティのみが空になります。私は何を間違っていますか?

4

1 に答える 1

0

私は自分で魂を見つけました:

symfony はエンティティをコレクションから削除しません

親エンティティの削除機能を変更する必要があります。

    /**
     * @param NewsPdfFile $file
     */
    public function removeFile(NewsPdfFile $file)
    {
        $this->files->removeElement($file);
        $file->setPdfFile(null);
    }

OneToMany Annotation の orphanRemoval=true:

    /**
     * @ORM\OneToMany(targetEntity="Mandant\CMSPlusBundle\Entity\NewsPdfFile", mappedBy="newsPdf", cascade={"persist"}, orphanRemoval=true)
     */
    private $files;
于 2016-12-16T11:14:26.550 に答える