Пара способов, которыми я закончил.
Первая - это функция, которая может вызывать статическую функцию.
$twig = new Twig_Environment($loader);
$twig->addFunction('staticCall', new Twig_Function_Function('staticCall'));
function staticCall($class, $function, $args = array())
{
if (class_exists($class) && method_exists($class, $function))
return call_user_func_array(array($class, $function), $args);
return null;
}
Затем можно использовать как,
{{ staticCall('myClass', 'mymethod', [optional params]) }}
Другой - использовать магический метод.
Добавить класс в рендер $ context
$data['TwigRef'] = new TheClass();
class TheClass
{
public function __call($name, $arguments) {
return call_user_func_array(array('TheClass', $name), $arguments);
}
...
}
Затем можно использовать как,
{{ TwigRef.myMethod(optional params) }}
Вероятно, лучше добавить несколько дополнительных проверок, чтобы вызывать только утвержденные функции.