在运行时从外部 URL 在 Shopware 6 店面的任何地方加载产品图像,而不将其保存在文件系统中

Load product image everywhere in the Shopware 6 storefront from external URL at runtime without saving it in filesystem

我正在 saleschannel.product.load 事件的 运行 时间更改来自外部 URL 的产品图像。这一切都很好,但是在下订单时,它给出了关于

的错误

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`sv3_dev`.`order_line_item`, CONSTRAINT `fk.order_line_item.cover_id` FOREIGN KEY (`cover_id`) REFERENCES `media` (`id`) ON UPDATE CASCADE)

我猜是因为我像这样用我的自定义实现覆盖了产品的媒体实体,所以在插入订单行项目时找不到媒体封面 ID:

        $pathInfo = pathinfo($url);
        $media = new MediaEntity();
        $media->setId(Uuid::randomHex());
        $media->setUrl($url);
        $media->setMimeType(sprintf('image/%s', $pathInfo['extension']));
        $media->setFileExtension($pathInfo['extension']);
        $media->setFileName($pathInfo['filename']);

        $productMediaEntity = new ProductMediaEntity();
        $productMediaEntity->setId(Uuid::randomHex());
        $productMediaEntity->setMedia($media);

        $productMediaEntity->setPosition(0);
        $mediaCollection = new ProductMediaCollection([$productMediaEntity]);
        $entity->setMedia($mediaCollection);
        if ($entity->getCover() === null) {
            $entity->setCover($productMediaEntity);
        } else {
            $entity->getCover()->setMedia($productMediaEntity->getMedia());
        }

有没有办法在 运行 时间动态更改店面各处的图像?

由于某些版权条款不允许在商店中下载图像,我无法将图像/媒体保存在文件系统中。我们只能在 运行 时间加载它。

对于偶然发现此问题的任何其他人,动态添加问题中提到的媒体实体适用于商店的其余部分,但下订单时除外,因为由于 FK 限制,它需要媒体 ID .所以我所做的是,我从 mediaRepository 创建了一个 media 实体,并使用该 ID 作为订单的参考而不是 Uuid::randomHex() 而没有在文件系统中保存实际图像。