Доступ к переменным шаблона ветки из php - PullRequest
6 голосов
/ 28 октября 2011

Можно ли получить доступ к каждой переменной, определенной в шаблоне ветки, из php?

Например:

Template:
...
{% set foo = 'foo' %}
...

И из PHP:

echo $template->foo

Или что-то ещевот так.

Ответы [ 3 ]

3 голосов
/ 01 ноября 2011

Доступ к каждой переменной очень громоздок, поэтому в итоге я создал расширение, содержащее необходимые мне данные:

class SampleExtension extends Twig_Extension {
    private $foo;

    function getName() {
        return 'sampleExtension';
    }

    function getFunctions() {
        return array(
            'setFoo' => new Twig_Function_Method($this, 'setFoo')
        );
    }

    function setFoo($value) {
        $this->foo = $value;
    }

    function getFoo() {
        return $this->foo;
    }
}

А в классе, где мне нужны были данные:

$this->sampleExtension = new SampleExtension();
$twigEnv->addExtension($this->sampleExtension);
...
$html = $twigEnv->render('myTemplate.tpt', ...);

Используя этот шаблон:

...
{{ setFoo('bar') }}
...

После рендера:

echo $this->sampleExtension->getFoo(); // Prints bar
0 голосов
/ 25 февраля 2014

Если вы хотите получить доступ к переменной шаблона, вы можете отправить эту переменную в качестве ссылки.

$foo = '';
$args['foo'] = &$foo;
$twig->render($template, $args);
...
echo $foo;

Пример: (цель - сделать тело и тему письма одним шаблоном)

Twig_Autoloader::register();
$loader = new Twig_Loader_String();
$twig = new Twig_Environment($loader);
$tl = <<<EOL
{% set subject = "Subject of a letter" %}
Hello, {{ user }}

This is a mail body

-- 
Site
EOL;
$mail['to'] = 'a@example.com';
$mail['subject'] = '';
$args = array(
    'user' => 'John', 
    'subject' => &$mail['subject']
);
$mail['message'] = $twig->render($tl, $args);
print_r($mail['subject']);

Этот код печатает: Тема письма

0 голосов
/ 28 октября 2011

Переменные, которые вы устанавливаете в Twig, устанавливаются в массив $context, который вы передаете Twig_Template->display(). Этот массив передается по значению, поэтому любые изменения в нем не будут видны во внешней области (PHP).

Итак, нет , вы не можете использовать переменные, которые вы установили в Twig в PHP.

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