这不能在Twig中完成,如模板的编译源中所示,每个包含的templats都有自己的私有范围,因为上下文数组是基于值而不是引用
$this-> loadTemplate(“bar.twig”,“main.twig”,2) – > display($context);
然后在包含的模板中调用doDisplay
protected function doDisplay(array $context,array $blocks = array())
注意
你可以通过创建自己的Twig_Environment和Twig_Template来改变这种行为,但是快速浏览一下我会发现你需要覆盖一些功能.
main.twig
{% set foo = 'bar' %}
{% include 'bar.twig' %}
Foo in foo: {{ foo }}
bar.twig
{% set foo = 'foo' %}
Foo in bar: {{ foo }}
来源main.twig
/* main.twig */
class __TwigTemplate_4ba23e628289532331bb5889dca1a4ec57774924d21a760ca6fe6f575a3978b5 extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
$this->parent = false;
$this->blocks = array(
);
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 1
$context["foo"] = "bar";
// line 2
$this->loadTemplate("bar.twig", "main.twig", 2)->display($context);
// line 3
echo "
Foo in foo: ";
// line 4
echo twig_escape_filter($this->env, ($context["foo"] ?? null), "html", null, true);
}
public function getTemplateName()
{
return "main.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 26 => 4, 23 => 3, 21 => 2, 19 => 1,);
}
public function getSourceContext()
{
return new Twig_Source("", "main.twig", "/fuz/twigfiddle.com/files/environment/k85WDdymIFgSoXLc/twig/main.twig");
}
}
来源bar.twig
/* bar.twig */
class __TwigTemplate_16789decfbb837d4631acf2e648380c0658722c50a0b53184b3f3c5f68f9b0ae extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
$this->parent = false;
$this->blocks = array(
);
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 1
$context["foo"] = "foo";
// line 2
echo "Foo in bar: ";
echo twig_escape_filter($this->env, ($context["foo"] ?? null), "html", null, true);
}
public function getTemplateName()
{
return "bar.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 21 => 2, 19 => 1,);
}
public function getSourceContext()
{
return new Twig_Source("", "bar.twig", "/fuz/twigfiddle.com/files/environment/k85WDdymIFgSoXLc/twig/bar.twig");
}
}