Загружать изображение продукта повсюду в витрине Shopware 6 с внешнего URL-адреса во время выполнения, не сохраняя его в файловой системе - PullRequest
0 голосов
/ 06 августа 2020

Я меняю изображение продукта с внешнего URL-адреса во время выполнения в событии saleschannel.product.load. Все это работает нормально, но при размещении заказа выдает ошибку около

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)

Я предполагаю, что это потому, что я перезаписываю медиа-объект продукта своей собственной реализацией. вот так, поэтому он не находит идентификатор обложки носителя при вставке позиции заказа:

        $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());
        }

Есть ли способ динамически изменять изображение во время выполнения повсюду на витрине?

Я не могу сохранить изображение / носитель в файловой системе из-за некоторых положений об авторских правах, которые не позволяют загружать изображения в магазине. Мы можем загрузить его только во время выполнения.

1 Ответ

0 голосов
/ 07 сентября 2020

Для всех, кто наткнется на это, динамическое добавление медиа-объекта, подобного упомянутому в вопросе, работает для остальной части магазина, за исключением размещения заказа, поскольку для этого требуется идентификатор медиа из-за ограничения FK. Итак, что я сделал, так это то, что я создал объект media из mediaRepository и использовал этот идентификатор в качестве ссылки для заказа вместо Uuid::randomHex() без сохранения фактического изображения в файловой системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...