2011-07-27 14 views
15

静的関数を呼び出したり、静的変数をtwigで使用する方法はありますか?静的関数または変数を使用するtwigテンプレートエンジン

私は静的ヘルパー関数のクラスを持ち、テンプレートに1つまたは2つ使用したいと考えています。

+0

達成したいことは何ですか?変数を渡すか、テンプレートで使用する独自の関数を提供するだけですか? – hakre

+0

私は静的ヘルパー関数のクラスを持っていますので、addFunctionを使ってそれらを追加する必要はありません。 – Alex

+1

私はさらに、これはあなたにとっても興味深い答えです:[twig-pass function into template](http://stackoverflow.com/questions/3595727/twig-pass-function-into-template/3595941#3595941) – hakre

答えて

23

私はそれをやってしまった。

最初は静的関数を呼び出すことができる関数です。その後、同じように使用でき

$twig = new Twig_Environment($loader); 
$twig->addFunction('staticCall', new Twig_Function_Function('staticCall')); 

function staticCall($class, $function, $args = array()) 
{ 
    if (class_exists($class) && method_exists($class, $function)) 
     return call_user_func_array(array($class, $function), $args); 
    return null; 
} 

{{ staticCall('myClass', 'mymethod', [optional params]) }} 

他の魔法の方法を使用することです。

レンダリング$コンテキスト

$data['TwigRef'] = new TheClass(); 

class TheClass 
{ 
    public function __call($name, $arguments) { 
     return call_user_func_array(array('TheClass', $name), $arguments); 
    } 

    ... 
} 

にクラスを追加しますが、その後にのみ、承認機能を呼び出すことが呼び出すので、いくつかの余分なチェックを追加する

{{ TwigRef.myMethod(optional params) }} 

はおそらく最高のように使用することができます。

+3

私は以前これを見ました。私はまだそれのための配置を見ている。 SF2プロジェクトでは、このコードはどこに行きますか? $ loaderはどこに定義されていますか? –

+0

名前空間で完全なクラス名を渡すときに、この最初のソリューションを動作させるにはどうすればよいですか? – slob

+0

いいです。私はこれが交響曲2のプロジェクトにあることを意図していないと考えます –

1

登録することで、機能を動的に追加することができます。彼らはすでにそれ自身の名前であなたの静的な機能エイリアス呼び出し可能かのどちらかです:

$twig = new Twig_Environment($loader); 
$twig->addFunction('functionName', new Twig_Function_Function('someFunction')); 

Functions section in Extending Twigを参照してください。

+0

静的なものを使用できるように私自身の関数を作る必要があると考えてください。 – Alex

+0

おそらく 'class :: function''を上記の' someFunction''パラメータとして登録して、それが動作するかどうかを教えてください。おそらく、静的( 'class'、 'function'、[params] – hakre

+0

それは私の問題です、それはうまくいくかもしれませんが、私は使用する必要があるかもしれないすべての機能のためにそれを行う必要があります。 – Alex

関連する問題