Есть ли способ вызвать статическую функцию или использовать старую переменную в веточке?
У меня есть класс статических вспомогательных функций и вы хотите использовать один или два в шаблоне.
Пару пути я закончил это делать.
Сначала это функция, которая может вызвать статическую функцию.
$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]) }}
Другой – использовать магический метод.
Добавить класс в контекст render $
$data['TwigRef'] = new TheClass(); class TheClass { public function __call($name, $arguments) { return call_user_func_array(array('TheClass', $name), $arguments); } ... }
Затем можно использовать как,
{{ TwigRef.myMethod(optional params) }}
Вероятно, лучше добавить дополнительные проверки, чтобы вызывались только разрешенные функции.
Вы можете динамически добавлять функции в свои шаблоны ветви, зарегистрировав их. Либо они уже вызываются, либо вы используете свою статическую функцию по имени:
$twig = new Twig_Environment($loader); $twig->addFunction('functionName', new Twig_Function_Function('someFunction'));
См. Раздел « Функции » в «Расширение веточки» .