ECCUBE3.0.15 twigのヘルパー拡張方法

twigのヘルパーとは

簡単に説明すると、
{{ url('homepage') }}
のように、twig内でグローバルに呼び出すことのできる関数です。

なぜtwigのヘルパーを拡張するのか

全twigで独自のPHPプログラムを実行することができるので、ControllerからRepositoryなどの変数をtwigに渡す必要がなくなります。
僕の場合、ヘッダーに商品情報を表示する必要があり、全ControllerでProductRepositoryの変数を渡す必要がありました。
ですが、twigのヘルパーを拡張することによって、
{{ get_product_list }}
のように簡単に呼び出すことができるようになりました。
まぁ僕の場合は、結構特殊な理由だとは思います。
twigヘルパーを拡張することによってもっと別のメリットはありますが、今回はそういった経緯がありました。

実装方法

/src/Eccube/Twig/Extension/EccubeExtension.php
に記述していく。

    public function getHoge()
    {
        //実装したいプログラムを書く
        return 'Hoge';
    }
    public function getFunctions()
    {
        $RoutingExtension = $this->app['twig']->getExtension('routing');
        return array(
            new \Twig_SimpleFunction('calc_inc_tax', array($this, 'getCalcIncTax')),
            new \Twig_SimpleFunction('active_menus', array($this, 'getActiveMenus')),
            new \Twig_SimpleFunction('csrf_token_for_anchor', array($this, 'getCsrfTokenForAnchor'), array('is_safe' => array('all'))),
            // Override: \Symfony\Bridge\Twig\Extension\RoutingExtension::url
            new \Twig_SimpleFunction('url', array($this, 'getUrl'), array('is_safe_callback' => array($RoutingExtension, 'isUrlGenerationSafe'))),
            // Override: \Symfony\Bridge\Twig\Extension\RoutingExtension::path
            new \Twig_SimpleFunction('path', array($this, 'getPath'), array('is_safe_callback' => array($RoutingExtension, 'isUrlGenerationSafe'))),
            new \Twig_SimpleFunction('is_object', array($this, 'isObject')),
            new \Twig_SimpleFunction('get_product', array($this, 'getProduct')),

            //下記一行だけを追記
            new \Twig_SimpleFunction('get_hoge', array($this, 'getHoge')),
        );
    }

以上でどこのtwigでもget_hoge()を使えば独自のプログラムを呼び出せます。

{{ dump(get_hoge()) }}

これで、Hogeが表示されればok!!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ABOUTこの記事をかいた人

山中 雅彦

大分でWebシステム受託開発会社のバックエンドエンジニアとして働いてます。 Laravel5でのシステム開発を中心に仕事してます。 高校卒業後に鉄鋼会社で電気整備の仕事をする傍ら、HTML、CSS、JS、PHP、MySQL、サーバ関連技術を独学で勉強。 2017年9月にWebシステム開発会社に入社し、システム開発をしています。 Web技術全般が好きなPHPerです。