所以我有一个基本上为空的树枝模板,应用程序生成一些树枝代码并将其作为变量传递给树枝模板,如下所示:
return $this->render('blank.html.twig', [
'twig' => $this->generateTwig()
]);
Run Code Online (Sandbox Code Playgroud)
blank.html.twig 看起来像这样:
{{ twig }}
Run Code Online (Sandbox Code Playgroud)
但是当模板被渲染时,它里面只有未渲染的树枝代码,如下所示:
{% extends 'base.html.twig' %} {% block content %} <h1>{{ 'app-name'|trans }}...
Run Code Online (Sandbox Code Playgroud)
在这个例子中,你如何渲染注入的树枝代码?
做一个file_put_contents('blank', $this->generateTwig())作品,但这违背了使用模板的目的。
您可以通过两种方式解决此问题。要么预先渲染$this->generateTwig()的输出并将(HTML)注入blank.html.twig模板(未经测试的伪):
$template = $this->get('twig')->createTemplate($this->generateTwig());
$twig = $template->render();
return $this->render('blank.html.twig', [
'twig' => $twig,
]);
Run Code Online (Sandbox Code Playgroud)
这种方法的缺点是,你必须调用{{ twig|raw }}的blank.html.twig,否则将枝杈逃脱HTML。另外:在将其提供给 Twig(再次)之前预渲染一个 Twig 模板感觉有点奇怪。
另一种方法是在模板中加载blank.html.twig模板:
{{ include(template_from_string(twig)) }}
Run Code Online (Sandbox Code Playgroud)
该template_from_string函数是StringLoaderExtension.
文档在这里:https : //twig.symfony.com/doc/3.x/recipes.html#loading-a-template-from-a-string
编辑:想想看,如果blank.html.twig真的只是一个输出的文件,则第三种方法可能会更简单{{ twig }}:
{{ include(template_from_string(twig)) }}
Run Code Online (Sandbox Code Playgroud)