2017-09-08 3 views
0

Cela semble assez simple, mais je semble être trop stupide pour le faire. J'ai ajouté un champ à fe_users appelé "cv" pour télécharger un fichier pdf. Dans mon modèle FrontendUser il ressemble à ceci:TYPO3 8 avec extbase: supprimer FileReference

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

Envoi d'un fichier fonctionne comme un charme, j'ai utilisé le script à partir https://github.com/helhum/upload_example dans certaines régions.

Le seul problème est la suppression d'un tel fichier, ou plutôt, la suppression de la connexion entre sys_file et l'utilisateur. Après avoir soumis un formulaire et cocher une case à cocher, j'ai essayé de le faire:

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

Après un rechargement de la page si je regarde le back-end, le fichier cv est toujours attaché à l'utilisateur (mais « modifié » était correctement défini sur le datetime actuel). Je ne comprends pas cela, comment puis-je définir la valeur FileReference à null?

Répondre

0

Assurez-vous de vérifier votre modèle. FileReferences sont stockés dans une relation M: N. Vous devez donc utiliser la déclaration Fölling dans votre modèle:

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

avec une initialisation dans le __constructor:

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

Maintenant que vous avez votre FileReference dans un ObjectStorage. Pour effacer tous FileReferences vous pouvez définir 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(); 
+0

Si je les stocker dans une m: n relation, est-il encore possible de créer un formulaire avec la propriété? si c'est le cas, comment? – Chi

+0

Ils sont stockés dans une relation m: n, vous n'avez aucun changement à utiliser un 1: 1 puisque cela est défini dans le 'TCA' pour la table' sys_file_reference'. Si vous voulez ajouter un fichier à 'ObjectStorage', vous pouvez utiliser' ObjectStorage-> attacher ($ file) '. Si vous ne voulez pas de relation m: n, vous pouvez utiliser 'TYPO3 \ CMS \ Core \ Resource \ File' à la place. –

+0

Pourquoi utiliserait-il un ObejctStorage si CV est un simple fichier par utilisateur? – j4k3