Ответ 1
Несколько способов, которыми я закончил это.
Сначала это функция, которая может вызвать статическую функцию.
$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]) }}
Другой способ - использовать магический метод.
Добавьте класс в контекст рендеринга
$data['TwigRef'] = new TheClass();
class TheClass
{
public function __call($name, $arguments) {
return call_user_func_array(array('TheClass', $name), $arguments);
}
...
}
Можно использовать, например,
{{ TwigRef.myMethod(optional params) }}
Наверное, лучше добавить дополнительные проверки, чтобы вызываемые вызываемые функции вызывались.