注册另一个类中的Twig函数

问题描述 投票:0回答:1

如果我做:

protected function registerTwigFunctions() {
    return [
        'mytwigfunction' => 'myTwigFunction',
    ];
}

一切都有效,只要我的功能在同一个班级。

但我正在努力尝试注册另一个类中的Twig函数。

如果我做:

protected function registerTwigFunctions() {
    return [
        'mytwigfunction' => [[anotherClass::class, 'myTwigFunction']],
    ];
}

然后我得到Unable to load the "My\Name\Space\AnotherClass" runtime in "record.twig" at line 1.,即使它正确地获取它的命名空间,当然我已经导入了它。

我也玩过语法,但它会抛出不同类型的错误。我相信这种语法是正确的。

我在Bolt CMS的上下文中提出这个问题,以防万一与注册Twig函数的标准Symfony不同,但我对此表示怀疑。

php symfony twig symfony-2.8 bolt-cms
1个回答
0
投票

问题是你的myFunction方法可能不是静态的。想象一下课程:

class Element
{
    public static function sayHi()
    {
        return "Hi!";
    }

    public function sayHello()
    {
        return "Hello!";
    }
}

为了在Twig函数中使用它,你可以这样注册它们:

public function getFunctions()
    {
        $element = new Element();

        return [
            new TwigFunction('test_function_static', [Element::class, 'sayHi']),
            new TwigFunction('test_function_dynamic_on_object', [$element, 'sayHello']),
        ];
    }

所以基本上callable必须遵守the rules,这意味着你只能在某个类的对象(实例)上调用非静态函数,而不能在类本身上调用。

如果你愿意补充

    ...
    new TwigFunction('test_function_dynamic_on_class', [Element::class, 'sayHello']),
    ...

你会看到你遇到的错误。

© www.soinside.com 2019 - 2024. All rights reserved.