如果我做:
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不同,但我对此表示怀疑。
问题是你的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']),
...
你会看到你遇到的错误。