<?php
declare(strict_types=1);
namespace NetInventors\NetiNextCmsElementBuilder\Subscriber;
use NetInventors\NetiNextCmsElementBuilder\Components\CmsElementTwigLoader;
use NetInventors\NetiNextCmsElementBuilder\Service\ElementCache;
use Shopware\Core\Content\Cms\Events\CmsPageLoadedEvent;
use Shopware\Core\Framework\Event\ShopwareSalesChannelEvent;
use Shopware\Storefront\Page\GenericPageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Twig\Environment;
use Twig\Loader\ChainLoader;
class TwigSubscriber implements EventSubscriberInterface
{
private Environment $twig;
private string $rootDir;
private ElementCache $elementCache;
public function __construct(Environment $twig, string $rootDir, ElementCache $elementCache)
{
$this->twig = $twig;
$this->rootDir = $rootDir;
$this->elementCache = $elementCache;
}
public static function getSubscribedEvents(): array
{
return [
GenericPageLoadedEvent::class => 'onPageLoaded',
CmsPageLoadedEvent::class => 'onPageLoaded',
];
}
public function onPageLoaded(ShopwareSalesChannelEvent $event): void
{
$loader = $this->twig->getLoader();
switch (true) {
case $loader instanceof ChainLoader:
$loader->addLoader(new CmsElementTwigLoader($this->rootDir, $this->elementCache));
break;
default:
throw new \Exception('Yet unsupported loader type. FUck.');
}
}
}