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で指定したデフォルトテンプレート。(正確には優先順の配列となっていて、先頭が指定したもの。)
ちなみに上記コードは、特定テンプレートの内容でごそっと入れ替えている。