我可以像这样为我的项目创建一个Twig扩展
class Functions extends Twig_Extension{
public function getName(){return 'foobar';}
public function getFunctions() {
return array(
'loremipsum' => new \Twig_SimpleFunction('asset', 'Functions::loremipsum')
);
public static function loremipsum($foo) {
return $foo;
}
}
这有效,但我想使用构造函数在某些函数中注入一些我需要的数据。
在'asset'
中使用Twig_SimpleFunction
只会导致PHP尝试执行功能loremipsum()
答案 0 :(得分:12)
public function getFunctions() {
return array(
'foo' => new Twig_Function_Method($this, 'bar');
);
}
public function bar($baz) {
return $this->foo . $baz;
}
查看extend Twig_Function
所有不同的类,以了解指定模板函数的所有不同方法。
对于较新的Twig_SimpleFunction
,您似乎可以将任何类型的callable
作为第二个参数传递给构造函数:
new Twig_SimpleFunction('foo', array($this, 'bar'))
答案 1 :(得分:4)
更新,以及如下所示:
class LogoExtension extends \Twig_Extension
{
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('logo', array($this, 'logo'), array('is_safe' => array('html'))),
);
}
public function logo()
{
return 'result';
}
/**
* {@inheritdoc}
*/
public function getName()
{
return 'logo';
}
}
当然,您在services.yml
配置文件中将此扩展类添加为树枝扩展名。
services:
company.twig.extension.logo:
class: Acme\DemoBundle\Twig\Extension\LogoExtension
tags:
- { name: twig.extension}