Add Extension Media Icon via Store API

20 Views Asked by At

I have created Plugin with configuration. This configuration contains 1 uploaded Media, that will be added as extension for a single product.

class ProductSubscriber implements EventSubscriberInterface
{
    private EntityRepository $productRepository;
    private EntityRepository $mediaRepository;
    private SystemConfigService $systemConfigService;

    public function __construct(
        EntityRepository $productRepository,
        EntityRepository $mediaRepository,
        SystemConfigService $systemConfigService
    ) {
        $this->productRepository = $productRepository;
        $this->mediaRepository = $mediaRepository;
        $this->systemConfigService = $systemConfigService;
    }
    
    public static function getSubscribedEvents(): array
    {
        return [
            'sales_channel.' . ProductEvents::PRODUCT_LOADED_EVENT => 'salesChannelProductLoaded',
        ];
    }

    public function salesChannelProductLoaded(SalesChannelEntityLoadedEvent $event): void
    {
        /** @var SalesChannelProductEntity $product */
        $products = $event->getEntities();
        $pluginConfig = $this->systemConfigService->get('plugin.config');

        foreach ($products as $product) {
            $id = $product->getParentId() ? $product->getParentId() : $product->getId();
            $criteria = new Criteria([$id]);
                        
            $productEntity = $this->productRepository->search($criteria, \Shopware\Core\Framework\Context::createDefaultContext())->first();
            $productExtensions = $productEntity->getExtensions();

            if (isset($pluginConfig['mediaIcon']) && !empty($pluginConfig['mediaIcon'])) {
                    $mediaEntity = $this->mediaRepository->search(
                        (new Criteria([$pluginConfig['mediaIcon']])), 
                        \Shopware\Core\Framework\Context::createDefaultContext()
                    )->first();
                    $prodExtensions['media_icon'] = new EntityCollection([$mediaEntity]);
            }

            $product->setExtensions($productExtensions );
        }
    }
}

Now I have the problem when I access the store API via https://myshop.com/store-api/product/<uuid_product> then the extension "media_icon" will be not displayed as Extension to the response. How can I display this extension via store api?

0

There are 0 best solutions below