Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从php访问细枝模板变量_Php_Twig - Fatal编程技术网

从php访问细枝模板变量

从php访问细枝模板变量,php,twig,Php,Twig,是否可以从php访问细枝模板中定义的每个变量 例如: 从PHP: echo $template->foo 或者类似的东西。在Twig中设置的变量被设置到传递给Twig\u Template->display()的$context数组中。此数组是按值传递的,因此对它的任何修改都不会在外部(PHP)范围中看到 因此,不,您不能使用PHP中在Twig中设置的变量。访问每个变量都非常麻烦,所以我最后做的是创建一个扩展来保存我需要的数据: class SampleExtension extends

是否可以从php访问细枝模板中定义的每个变量

例如:

从PHP:

echo $template->foo

或者类似的东西。

在Twig中设置的变量被设置到传递给
Twig\u Template->display()的
$context
数组中。此数组是按值传递的,因此对它的任何修改都不会在外部(PHP)范围中看到


因此,,您不能使用PHP中在Twig中设置的变量。

访问每个变量都非常麻烦,所以我最后做的是创建一个扩展来保存我需要的数据:

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

如果要访问模板变量,可以将此变量作为引用发送

$foo = '';
$args['foo'] = &$foo;
$twig->render($template, $args);
...
echo $foo;
示例:(目标是在一个模板中创建电子邮件正文和主题)

Twig_Autoloader::register();
$loader=新的细枝加载器字符串();
$twig=新的twig_环境($loader);
$tl=渲染($tl,$args);
打印(邮件[主题]);
此代码打印:
字母的主题

如果该数组中的变量是引用,则此操作可能有效。我没有测试过它,但从未说过:)如果我在上下文数组中发送了一个对象并使用自定义细枝函数设置该对象的属性,是否可能?@ZenMaster是的,这是可能的;)添加更多解释
$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']);