Hallo alle zusammen,
Ich habe folgendes Problem:
Ich habe beim fe_user ein Feld "Avatar" hinzugefügt und im Extensionbuilder als Feldtyp "Image" angegeben. Dass wird ja dann als FileReference behandelt.
Nun habe ich mit dem pluploader einen ImageUpload gebaut, mit dem das file hochgeladen wird.
Sieht so aus:
/** * action uploadProfileImage * * @return void */ public function uploadProfileImageAction() { $fileName = $_FILES['file']['name']; $storageRepository = $this->objectManager->get('TYPO3\\CMS\\Core\\Resource\\StorageRepository'); $storage = $storageRepository->findByUid('1'); $relativFolderPath = $this->settings['profileImageRelativPath'] . '/' . $GLOBALS['TSFE']->fe_user->user['uid']; $fullFolderPath = $this->settings['profileImageFullPath'] . '/' . $GLOBALS['TSFE']->fe_user->user['uid']; $absolutePath = PATH_site . $fullFolderPath; $targetFolder = ''; $targetFolder = $storage->createFolder($relativFolderPath); } else { $targetFolder = $storage->getFolder($relativFolderPath); } $fileName = $this->uploadData($fileName, $fullFolderPath); $relativFilePath = $relativFolderPath . '/' . $fileName; if ($storage->hasFile($relativFilePath)) { $movedNewFile = $storage->getFile($relativFilePath); } else { $movedNewFile = $storage->addFile($relativFilePath, $targetFolder, $fileName); } $newFileReference = $this->objectManager->get('\\MY\\OWN\\MODEL\\FileReference'); $newFileReference->setFile($movedNewFile); $userObject = $this->feUserRepository->findByUid($GLOBALS['TSFE']->fe_user->user['uid']); $userObject->setAvatar($newFileReference); $this->feUserRepository->update($userObject); $persistenceManager = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\PersistenceManager'); $persistenceManager->persistAll();
Das haut alles hin bis zum persistAll().
Dort bekomme ich dann folgende Exception:
"Table 'myextension.tx_EXTENSION_my_own_model_filereference' doesn't exist"
Meine FileReference Klasse sieht so aus:
Das habe ich in mehreren Threads so gesehen, dass man das so machen sollte.
class FileReference extends \TYPO3\CMS\Extbase\Domain\Model\FileReference{ /** * uid of a sys_file * * @var integer */ protected $originalFileIdentifier; /** * setOriginalResource * * @param \TYPO3\CMS\Core\Resource\FileReference $originalResource * @return void */ public function setOriginalResource(\TYPO3\CMS\Core\Resource\FileReference $originalResource) { $this->originalResource = $originalResource; $this->originalFileIdentifier = (int)$originalResource->getOriginalFile()->getUid(); } /** * setFile * * @param \TYPO3\CMS\Core\Resource\File $falFile * @return void */ $this->originalFileIdentifier = (int)$falFile->getUid(); } }
Er versucht offensichtlich, meine FileReference Klasse auf eine Table zu mappen was natürlich nicht funktionieren wird.
Jetzt meine Frage, wie mache ich das am besten? :)
Ist mein Ansatz überhaupt korrekt mit dem Storage das zu machen?
Also ganz allgemein, wie würdet ihr das lösen, einen Fileupload mit Ajax und das Bild soll dann bei einem Objekt gespeichert werden in der Uploadaction.
Vielen dank für eure Hilfe,
Metabolic