Event.php作成
- app/Customize/EventListener/TwigListener.phpを作成
ここではカテゴリの配列を共通変数として設定してみる
<?php
namespace Customize\EventListener;
use Eccube\Repository\CategoryRepository;
use Eccube\Request\Context;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Twig\Environment;
class TwigListener implements EventSubscriberInterface
{
protected $initialized = false;
/**
* @var Environment
*/
protected $twig;
/**
* @var Context
*/
protected $requestContext;
/**
* @var CategoryRepository
*/
protected $categoryRepository;
/**
* TwigInitializeListener constructor.
*
* @param Environment $twig
* @param Context $context
*/
public function __construct(
Environment $twig,
Context $context,
CategoryRepository $categoryRepository
) {
$this->twig = $twig;
$this->requestContext = $context;
$this->categoryRepository = $categoryRepository;
}
public function onKernelRequest(RequestEvent $event)
{
if ($this->initialized) {
return;
}
if ($this->requestContext->isFront()) {
// カテゴリ一覧を取得
$categories = $this->categoryRepository->findAll();
// ここで共通変数設定
$this->twig->addGlobal('categories', $categories);
}
$this->initialized = true;
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents()
{
return [
KernelEvents::REQUEST => [
['onKernelRequest', 20],
],
];
}
}
カテゴリ一覧の取得にCategoryRepositoryを使用するので、__construct()
にCategoryRepositoryを追加するのを忘れずに
もちろん配列以外にも好きなものを変数に設定できる$this->twig->addGlobal('color', 'blue');
Twigで表示してみる
- お好みのtwigで
{% for category in categories %}
ID: {{ category.id }}
Name: {{ category.name }}
{% endfor %}
EC-CUBE4にて、すべてのtwigファイルで共通使用できる変数を設定する