从树枝延伸呈现模板
您可以定义进行扩展,以便它需要的环境。 Twig会自动将它传递给函数。
public function getFunctions()
{
return array(
new \Twig_SimpleFunction(
'myfunction',
array($this, 'myFunction'),
array('needs_environment' => true)
),
);
}
public function myFunction(\Twig_Environment $environment, string $someParam)
{
// ...
}
使用此功能用户可以在树枝环境实例传递给一个树枝延伸
private $environment;
public function initRuntime(\Twig_Environment $environment)
{
$this->environment = $environment;
}
工作,然后做$ this-> environment-> render() – ojreadmore 2012-06-05 15:59:42
现在不推荐使用initRuntime。 @tvlooy的needs_environment是正确的答案。 – MECU 2015-12-01 22:10:37
@tvlooy答案给我一个提示,但对我没有工作。我需要来实现这一目标是:
namespace AppBundle\Twig;
class MenuExtension extends \Twig_Extension
{
public function getName()
{
return 'menu_extension';
}
public function getFunctions()
{
return [
new \Twig_SimpleFunction('myMenu', [$this, 'myMenu'], [
'needs_environment' => true,
'is_safe' => ['html']
])
];
}
public function myMenu(\Twig_Environment $environment)
{
return $environment->render('AppBundle:Menu:main-menu.html.twig');
}
}
我需要addtionaly添加'is_safe' => ['html']
避免HTML的autoescaping。
我也注册了类symfony作为服务:
app.twig.menu_extension:
class: AppBundle\Twig\MenuExtension
public: false
tags:
- { name: twig.extension }
在嫩枝模板我已经添加{{ myMenu() }}
我"twig/twig": "~1.10"
和Symfony的3.1.3版本
'needs_environment'=> true是真正的交易。 +1 – 2017-01-12 13:26:50
\ Twig_Function_Method已弃用,请使用\ Twig_SimpleFunction – spectralsun 2013-05-13 23:15:55