php twig 获取传递给扩展函数中渲染的变量
php twig get variables passed to render in extension function
我发誓我用谷歌搜索了这个并试图理解文档,但我就是不明白。我正在编写一个 twig 函数,我无法理解的是如何从函数内部访问传递给 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?
}
}
您想在函数声明中使用 '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);
}
我发誓我用谷歌搜索了这个并试图理解文档,但我就是不明白。我正在编写一个 twig 函数,我无法理解的是如何从函数内部访问传递给 render 的变量。
所以如果我有这个注册我的扩展并调用渲染:
$o = new SomeObject();
$twig->addExtension(new MyExtension());
$twig->render('example.html',array('obj'=>$o))
而 example.html 只是 {{ myfunc('foo') }}
如何从 MyExtension:
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?
}
}
您想在函数声明中使用 '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);
}