Twig 细枝变量中的细枝变量

Twig 细枝变量中的细枝变量,twig,Twig,我有一个小树枝变量html。要在细枝模板中显示它,我需要{{html} 该变量如下所示: {{region\u top}}{{region\u center}} region.*也是一个变量。当Twig解析myhtml变量时,它不会解析内部变量(区域) 我该怎么办 我有细枝变量html。要在细枝模板中显示它,我需要{{html}。这个变量看起来像{{region\u top}{{region\u center}}。区域_*也是变量。当twig解析我的html变量时,他没有解析内部变量(区域)。我

我有一个小树枝变量html。要在细枝模板中显示它,我需要
{{html}

该变量如下所示:

{{region\u top}}{{region\u center}}

region.*
也是一个变量。当Twig解析my
html
变量时,它不会解析内部变量(区域)

我该怎么办

我有细枝变量html。要在细枝模板中显示它,我需要{{html}。这个变量看起来像{{region\u top}{{region\u center}}。区域_*也是变量。当twig解析我的html变量时,他没有解析内部变量(区域)。我该怎么办

Twig将字符串作为文本字符串,这意味着您将看到变量的内容,即转义。如果您希望它也能够显示{{region_top}},我建议如下:

{{html|replace({'{{region_top}}': region_top, '{{region_center}}': region_center})}}
$env = new \Twig_Environment(new \Twig_Loader_String());
echo $env->render(
  "Hello {{ name }}",
  array("name" => "World")
);
如果html变量的内容也是动态的(这意味着它可以包含不止这两个变量),我会编写一个小树枝插件,它可以做你想做的事情。编写插件非常容易

编辑:这是我刚写完的分机

编辑2:扩展现在使用环境呈现字符串,因此它对字符串求值,而不仅仅是替换变量。这意味着您的变量可以包含模板可以包含的任何内容,它将由Twig本身进行渲染和转义。我太棒了


一个选项是将模板呈现为字符串。您可以这样做:

{{html|replace({'{{region_top}}': region_top, '{{region_center}}': region_center})}}
$env = new \Twig_Environment(new \Twig_Loader_String());
echo $env->render(
  "Hello {{ name }}",
  array("name" => "World")
);
我将让您决定如何准确地构造代码以使其工作,但它可能是这样的: 1) 获取包含未被替换变量的内部模板文本。 2) 将该内部模板文本呈现为$html变量。一定要通过你需要的任何VAR。 3) 呈现包含{{html}的原始模板。确保在vars数组中传入'html'=>$html

请参见


大多数人在期望过滤器/函数使用当前语言进行计算时都会想到(并搜索)“eval”,这似乎经常被忽略。“字符串中的模板”并不是我想到的第一个搜索查询。

您还可以将数组或对象传递给视图,然后使用twig attribute()方法:


首先,接受您之前问题的答案…也许替换过滤器可以使用例如preg_replace with placeholder?类似这样的{html | replace({{{{$1}}}:$1}}}我不知道插件应该做什么:(@Meliborn我指的是一个扩展。我刚刚检查过,但奇怪的是,我似乎无法从扩展中获取变量的值。我会继续查找:我自己可能需要类似的东西。@Meliborn刚刚添加了一个扩展,它可以做您希望它做的事情:)@Meliborn刚刚更新了扩展名:它现在使用环境来解析字符串,因此您可以在普通模板中获得所有好处。太棒了,但是如何禁用自动转义?原始过滤器和自动转义表达式不起作用:(可能是扩展名中的render()方法有问题?这正是我所需要的,非常简单。谢谢!