2017-09-08 61 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