【EC-CUBE4】全Twigで使用できる共通変数を設定する

めだま

EC-CUBE4にて、すべてのtwigファイルで共通使用できる変数を設定する

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 %}

\ 案件のご依頼・ご相談はこちらから /