шаблонный движок, использующий статическую функцию или переменную - PullRequest
15 голосов
/ 27 июля 2011

Есть ли способ вызвать статическую функцию или использовать статическую переменную в ветке?

У меня есть класс статических вспомогательных функций и я хочу использовать одну или две в шаблоне.

Ответы [ 2 ]

23 голосов
/ 28 июля 2011

Пара способов, которыми я закончил.

Первая - это функция, которая может вызывать статическую функцию.

$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) }}

Вероятно, лучше добавить несколько дополнительных проверок, чтобы вызывать только утвержденные функции.

1 голос
/ 27 июля 2011

Вы можете динамически добавлять функции к своим шаблонам веток, регистрируя их.Либо они уже могут вызываться, либо вы называете статическую функцию собственным именем:

$twig = new Twig_Environment($loader);
$twig->addFunction('functionName', new Twig_Function_Function('someFunction'));

См. Раздел Функции в Расширяющейся веточке .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...