php twig get变量传递给扩展函数

时间:2016-09-14 00:15:58

标签: php symfony twig twig-extension

我发誓我已经用Google搜索并尝试了解文档,但我只是没有得到它。我正在编写一个twig函数,我无法理解的是如何从函数内部访问传递给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?
  }
}

1 个答案:

答案 0 :(得分:4)

您想在函数声明中使用'needs_context' => true

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

然后,您将获得第一个(或第二个,如果needs_environment也是真的)参数,一个包含当前上下文数据的数组。这将保留您的变量。

public function myfunc(\Twig_Environment $env, $context, $name)
{
     var_dump($context);
}