如何创建自定义Twig函数类,而不使用静态方法?

Ska*_*Rat 5 php templating-engine twig

我可以像这样为我的项目创建一个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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,但我想使用构造函数在一些函数中注入一些我需要的数据.

简单地使用'asset'in Twig_SimpleFunction将导致PHP尝试执行functonloremipsum()

dec*_*eze 12

public function getFunctions() {
    return array(
        'foo' => new Twig_Function_Method($this, 'bar');
    );
}

public function bar($baz) {
    return $this->foo . $baz;
}
Run Code Online (Sandbox Code Playgroud)

查看extend Twig_Function指定模板函数的所有不同方法的所有不同类.

对于较新的Twig_SimpleFunction,似乎你可以将任何类型callable的第二个参数传递给构造函数:

new Twig_SimpleFunction('foo', array($this, 'bar'))
Run Code Online (Sandbox Code Playgroud)