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

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

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


```
<?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
08/05 15:42

edit

Twig