Mit dieser fertigen Methode generieren Sie schnell und einfach auf Basis eines Dateipfades (/fileadmin/user_upload/image.png) eine FileReference.
Extbase Snippet für FileReference
Folgende Use-Statements werden genutzt:
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Domain\Model\FileReference;
use TYPO3\CMS\Core\Resource\StorageRepository;
use TYPO3\CMS\Core\Resource\FileRepository;
use TYPO3\CMS\Core\Resource\ResourceFactory;
Hier die eigentliche Methode, direkt einsatzbereit:
/**
* Generates a FileReference based on an absolute filepath
*
* @param string $filepath Filepath
* @return \TYPO3\CMS\Extbase\Domain\Model\FileReference Generated FileReference Object
*/
private function generateFileReference(string $filepath): \TYPO3\CMS\Extbase\Domain\Model\FileReference {
$pathInfo = pathinfo($filepath);
$folderpath = $pathInfo['dirname'] . '/';
$filename = $pathInfo['basename'];
if (strpos($folderpath, 'fileadmin') !== false) {
$folderpath = str_replace('fileadmin', '', $folderpath);
}
$storageRepository = GeneralUtility::makeInstance(StorageRepository::class);
$defaultStorage = $storageRepository->getDefaultStorage();
$folder = $defaultStorage->getFolder($folderpath);
$file = $folder->getStorage()->getFileInFolder(basename($filename), $folder);
// Use the ResourceFactory to create a FileReference
$resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class);
$coreFileReference = $resourceFactory->createFileReferenceObject([
'uid_local' => $file->getUid(),
'table_local' => 'sys_file',
]);
// Create an Extbase FileReference and set the OriginalResource to the Core FileReference
$fileRef = new \TYPO3\CMS\Extbase\Domain\Model\FileReference();
$fileRef->setOriginalResource($coreFileReference);
return $fileRef;
}
Wichtig: Zu beachten
Die Bildpfade dürfen nicht außerhalb des Drivers in einem Ordner sein (z.B. in einem Extension Ordner). Das heißt: Pfade wie typo3conf/ext/MeineExt/Resources/Public/Images würde nicht so einfach möglich sein mit dem obigen Code.
Der Bildpfad, der an die Funktion übergeben wird, darf nicht fileadmin im Pfad haben. Fileadmin ist in den meisten Fällen der Driver. Nur Ordner darin werden berücksichtigt. Daher macht es Sinn z.B: mit substr(); den Pfad ab Fileadmin nach links zu entfernen.
Zum Schluss können wir die Filereference für unser Model nutzen:
$image1FileReference = $this->generateFileReference($cutImageName);
$jobObject->setImage1($image1FileReference);