0

私はこれをグーグルで検索し、ドキュメントを理解しようとしたことを誓いますが、私はそれを理解していません. 小枝関数を書いていますが、関数内から render に渡された変数にアクセスする方法がわかりません。

したがって、拡張機能を登録して render を呼び出すと、次のようになります。

$o = new SomeObject();
$twig->addExtension(new MyExtension());
$twig->render('example.html',array('obj'=>$o))

そしてexample.htmlは{{ myfunc('foo') }} 、MyExtensionのmyfunc内から変数「obj」にアクセスするにはどうすればよいですか:

class MyExtension extends \Twig_Extension
{
  public function getName()
  {
    return 'myextension';
  }
  public function getFunctions()
  {
    return array(
      new \Twig_SimpleFunction('myfunc', 'MyExtension::myfunc', array('needs_environment' => true))
    );
  }
  public static function myfunc(\Twig_Environment $env, $name)
  {
    //how to I get 'obj' from $twig->render in here?
  }
}
4

1 に答える 1

4

'needs_context' => true関数宣言で使用したい:

new \Twig_SimpleFunction('myfunc', [$this, 'myfunc'], [
    'needs_environment' => true,
    'needs_context' => true,
])

次に、最初の (またはneeds_environmenttrue の場合は 2 番目の) 引数として、現在のコンテキストのデータを含む配列を取得します。これにより、変数が保持されます。

public function myfunc(\Twig_Environment $env, $context, $name)
{
     var_dump($context);
}
于 2016-09-14T06:25:42.630 に答える