PHPプログラムに関する各種メモ書き

Twigテンプレートの変数の中で変数をevalするフィルタ

Twigテンプレートの変数の中で変数をevalするフィルタがとても便利なので紹介します。

Twig > Extension > Evalute.php で保存

<?php
class Twig_Extension_Evaluate extends \Twig_Extension {
    public function getFilters( ) {
        return array(
            'evaluate' => new \Twig_Filter_Method( $this, 'evaluate', array(
                'needs_environment' => true,
                'needs_context' => true,
                'is_safe' => array(
                    'evaluate' => true
                )
            ))
        );
    }
    public function evaluate( \Twig_Environment $environment, $context, $string ) {
        $loader = $environment->getLoader( );
        $parsed = $this->parseString( $environment, $context, $string );
        $environment->setLoader( $loader );
        return $parsed;
    }
    protected function parseString( \Twig_Environment $environment, $context, $string ) {
        $environment->setLoader( new \Twig_Loader_String( ) );
        return $environment->render( $string, $context );
    }
    public function getName( ) {
        return 'evaluate';
    }
}

Twig読み込み時に以下の行を追加

$twig->addExtension( new Twig_Extension_Evaluate() );

以下のように変数の中の変数が展開できます

{% set var = 'inner variable' %}
{{'this is a string with an {{var}}'|evaluate}}

 ↓

this is a string with an inner variable

このような書き方もできます(ハッシュのメンバ名が変数の時に展開する)

$data['column_name'] = "data_id";
$data['data_hash']['data_id'] = 999;
{{data_hash[column_name]|evaluate}}

 ↓

999

引用 : http://goo.gl/Y1LlSz

関連エントリー

No.959
11/29 23:08

edit

Twig