<?php
declare(strict_types=1);
namespace App\Module\Cms\Subscriber;
use App\Module\Cms\Provider\CmsContentProvider;
use Denios\Data\Product\Product;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
/**
* Class DetailSlotSubscriber
*
* @author André Varelmann <andre.varelmann@bestit-online.de>
* @package App\Module\Cms\Subscriber
*/
class DetailSlotSubscriber implements EventSubscriberInterface
{
private CmsContentProvider $provider;
/**
* DetailSlotSubscriber constructor.
*
* @param CmsContentProvider $provider
*/
public function __construct(
CmsContentProvider $provider
) {
$this->provider = $provider;
}
/**
* @return array
*/
public static function getSubscribedEvents(): array
{
return [KernelEvents::VIEW => 'onKernelResponse'];
}
/**
* @param ViewEvent $event
*
* @return void
*/
public function onKernelResponse(ViewEvent $event): void
{
$controllerResult = $event->getControllerResult();
if (!is_array($controllerResult)
|| !isset($controllerResult['product'])
|| !$controllerResult['product'] instanceof Product
|| count($controllerResult['product']->categories) === 0
) {
return;
}
$slots = $this->provider->getDetailContent($controllerResult['product']);
if ($slots !== null && is_array($slots)) {
foreach ($slots as $slotName => $slotContent) {
if ($slotContent !== null) {
$controllerResult[$slotName] = $slotContent;
}
}
$event->setControllerResult($controllerResult);
}
}
}