簡體   English   中英

從php訪問twig模板變量

[英]Accessing twig template variables from php

是否可以從php訪問twig模板中定義的每個變量?

例如:

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

從PHP:

echo $template->foo

或類似的東西。

訪問每個變量非常麻煩,所以我最終做的是創建一個包含我需要的數據的擴展:

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 = 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']);

此代碼打印: 一封信的主題

您在Twig中設置的變量被設置到傳遞給Twig_Template->display()$context數組中。 此數組按值傳遞,因此在外部(PHP)范圍內不會看到對它的任何修改。

所以, ,你不能使用你在PHP中的Twig中設置的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM