2017-09-08 129 views
0

这似乎很简单,但我似乎太愚蠢,做不到。我为fe_users添加了一个名为“cv”的字段用于上传PDF文件。在我的FrontendUser型号,它看起来是这样的:TYPO3 8与extbase:删除FileReference

/** 
* @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的值设置为null?

回答

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可以设置cvnew \TYPO3\CMS\Extbase\Persistence\ObjectStorage()

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

如果我把它们存储在一个M:N的关系,它仍然可以创建与属性的表单?如果是这样 - 如何? – Chi

+0

它们存储在一个m:n关系中,因为它在'TCA'中为'sys_file_reference'表定义,所以你没有改变使用1:1。如果你想添加一个文件到ObjectStorage,你可以使用ObjectStorage-> attach($ file)'。如果您不想使用m:n关系,则可以使用“TYPO3 \ CMS \ Core \ Resource \ File”。 –

+0

如果CV只是每个用户的单个文件,他为什么要使用ObejctStorage? – j4k3