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?