Eccube4 twig 任意のディレクトリのテンプレートを読み込む

Eccube4 twig: 任意のディレクトリのテンプレートを読み込むには、loaderでパスを指定すればOK。

相対パス指定も絶対パス指定もできずとても困っていた・・・が、これで解決。

イベントで書いた場合:

class HogehogeEvent implements EventSubscriberInterface
{
    /**
     * @var EccubeConfig
     */
    protected $eccubeConfig;

    /**
     * @var EntityManagerInterface
     */
    private $entityManager;

    /**
     * @var AuthorizationCheckerInterface
     */
    protected $authorizationChecker;

    /**
     * @var TokenStorageInterface
     */
    protected $tokenStorage;

    /**
     * @var Router
     */

    private $router;

    /**
     * ContactChatEvent constructor.
     */
    public function __construct(
        EccubeConfig $eccubeConfig,
        EntityManagerInterface $entityManager,
        AuthorizationCheckerInterface $authorizationChecker,
        TokenStorageInterface $tokenStorage,
        CampaignRepository $campaignRepository,
        OrderReferRepository $orderReferRepository,
        Router $router,
        \Twig_Environment $twig
        
    )
    {
        $this->eccubeConfig  = $eccubeConfig;
        $this->entityManager = $entityManager;
        $this->authorizationChecker = $authorizationChecker;
        $this->tokenStorage = $tokenStorage;
        $this->router = $router;
        $this->twig = $twig;

        // hogehogeテンプレートのパスを設定する
        $this->twig->getLoader()->addPath('app/template/hogehoge', 'hogehoge_template');
    }

    /**
     * @return array
     */
    public static function getSubscribedEvents()
    {
        return [
            //hogehoge下のファイルを指定できる
            '@hogehoge/Admin/Order/edit.twig' => ['AdminOrderEdit', 99],
        ];
    }

    public function AdminOrderEdit(TemplateEvent $event) {
        $source = $this->twig->getLoader()
                // hogehoge 下のファイル
                ->getSourceContext("@hogehoge/Admin/Order/edit.twig")  
                ->getCode();

        $source = $this->twig->getLoader()
                // ★Eccubeで指定したデフォルトテンプレート
                ->getSourceContext("@__main__/Admin/Order/edit.twig") 
                ->getCode();
        $event->setSource($source);
    }

@__main__ は★Eccubeで指定したデフォルトテンプレート。(正確には優先順の配列となっていて、先頭が指定したもの。)

ちなみに上記コードは、特定テンプレートの内容でごそっと入れ替えている。