gpt4 book ai didi

symfony - 将 Twig 代码传递到 Twig 模板并呈现它

转载 作者:行者123 更新时间:2023-12-04 02:35:39 24 4
gpt4 key购买 nike

所以我有一个基本为空的 twig 模板,应用程序生成一些 twig 代码并将其作为变量传递到 twig 模板中,如下所示:

return $this->render('blank.html.twig', [
'twig' => $this->generateTwig()
]);

blank.html.twig 看起来像这样:

{{ twig }}

但是当模板被渲染时,它内部只有未渲染的 Twig 代码,如下所示:

{% extends 'base.html.twig' %} {% block content %} <h1>{{ 'app-name'|trans }}...

在这个例子中你如何渲染注入(inject)的 Twig 代码?

执行 file_put_contents('blank', $this->generateTwig()) 可行,但这违背了使用模板的目的。

最佳答案

您可以通过两种方式解决这个问题。您可以预呈现 $this->generateTwig() 的输出并将(HTML)注入(inject) blank.html.twig 模板(未经测试的伪):

$template = $this->get('twig')->createTemplate($this->generateTwig());
$twig = $template->render();

return $this->render('blank.html.twig', [
'twig' => $twig,
]);

这种方法的缺点是你必须在 blank.html.twig 中调用 {{ twig|raw }},否则 Twig 会转义 HTML。另外:在将它提供给 Twig(再次)之前预渲染一个 Twig 模板感觉有点奇怪。

另一种方法是将模板加载到 blank.html.twig 模板中:

{{ include(template_from_string(twig)) }}

template_from_string 函数是 StringLoaderExtension 的一部分。

此处的文档:https://twig.symfony.com/doc/3.x/recipes.html#loading-a-template-from-a-string


编辑:考虑到这一点,如果 blank.html.twig 实际上只是一个输出 {{ twig }} 的文件,第三种方法可能会更简单:

$template = $this->get('twig')->createTemplate($this->generateTwig());
return $template->render();

关于symfony - 将 Twig 代码传递到 Twig 模板并呈现它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62030960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com