Hallo ich würde das Thema gern nochmal aufgreifen.
Ich entwickle ein Plugin, mit welchem im Storefront Bilder hochgeladen werden können.
Dazu habe ich einen neuen Mediaordner erstellt, welcher mir als Hauptordner dienen soll. Für jeden Upload erstelle ich programmatisch einen Unterordner. Dies funktioniert so weit.
Hier der Code dazu:
$context = Context::createDefaultContext();
$mediaFolderRepository = $this->container->get('media_folder.repository');
$pluginMediaFolder = "7aa052bdf3e04e788e0d50ba6753482a";
$folderId = Uuid::randomHex();
$configFolderId = Uuid::randomHex();
$mediaFolderRepository->create(
[
[
'id' => $folderId,
'name' => 'upload-' . (new \DateTime())->getTimestamp(),
'parentId' => $pluginMediaFolder,
'configuration' => [
'id' => $configFolderId
]
]
],
$context
);
Nun versuche ich meine Bilder in diesem Unterordner zu speichern.
//$folderId ist hier die ID des oben erstellen Unterordners
$mediaId = $this->mediaService->createMediaInFolder($folderId, $context, $isPrivate = false);
// entnommen aus
// vendor/shopware/platform/src/Storefront/Framework/Media/StorefrontMediaUploader.php
try {
$context->scope(Context::SYSTEM_SCOPE, function (Context $context) use ($mediaFile, $mediaId): void {
$this->fileSaver->persistFileToMedia(
$mediaFile,
pathinfo(Uuid::randomHex(), PATHINFO_FILENAME),
$mediaId,
$context
);
});
} catch (MediaNotFoundException $e) {
throw new UploadException($e->getMessage());
}
Damit wird das Bild auch gepseichert, jedoch nicht in meinem Unterordner sondern im (Default)-Mediabereich.
Wenn ich es richtig verstehe, wird ein Platzhalter vom mediaService erstellt, welcher durch $mediaId widergesepiegelt wird.
Anschließend wird per persistFileToMedia das file auf diesen Platzhalter gespeichert, korrekt?
Was übersehe ich?
Vielen Dank für jeden Hinweis & Viele Grüße