将树枝代码传递到树枝模板并呈现它
Passing twig code into a twig template and rendering it
所以我有一个基本为空的 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 }}...
如何渲染本例中注入的 twig 代码?
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,
]);
这种方法的缺点是您必须在 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();
所以我有一个基本为空的 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 }}...
如何渲染本例中注入的 twig 代码?
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,
]);
这种方法的缺点是您必须在 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();