首页 文章

带extbase的TYPO3 8:删除FileReference

提问于
浏览
0

这看起来很简单,但我似乎太愚蠢了 . 我在fe_users中添加了一个字段,名为“cv”,用于上传pdf文件 . 在我的FrontendUser模型中,它看起来像这样:

/**
 * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
 * @cascade remove
 */
protected $cv;

上传文件就像一个魅力,我使用https://github.com/helhum/upload_example部分的脚本 .

唯一的问题是删除这样的文件,或者更确切地说,删除sys_file和用户之间的连接 . 提交表单并选中复选框后,我尝试这样做:

$user->setCv(null);
$user->setEdited(new \DateTime());
$this->frontendUserRepository->update($user);
$persistenceManager->persistAll();

在页面重新加载后,如果我查看后端,cv文件仍然附加到用户(但“已编辑”已正确设置为当前日期时间) . 我不明白这一点,我怎样才能将FileReference Value设置为null?

1 回答

  • 0

    务必检查您的模型 . FileReferences 存储在M:N关系中 . 因此,您必须在模型中使用folling声明:

    /**
     * cv
     *
     * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference>
     * @cascade remove
     */
    protected $cv = null;
    

    __constructor 初始化:

    public function __construct()
    {
      $this->cv = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
    }
    

    现在你的 FileReferenceObjectStorage 中 . 要清除所有 FileReferences ,您可以将 cv 设置为 new \TYPO3\CMS\Extbase\Persistence\ObjectStorage()

    $user->removeCv(new \TYPO3\CMS\Extbase\Persistence\ObjectStorage()); 
    $user->setEdited(new \DateTime()); 
    $this->frontendUserRepository->update($user); 
    $persistenceManager->persistAll();
    

相关问题