gpt4 book ai didi

twig - Symfony/Twig : Stop rendering the rest of a template

转载 作者:行者123 更新时间:2023-12-04 16:05:56 25 4
gpt4 key购买 nike

我一直在互联网上搜索这个,但我找不到任何关于这个的信息。

我正在创建一个简单的 Twig 模板,该模板将在多个位置使用,但需要一些变量。

我希望能够做这样的事情:

{% if some_variable is not defined %}
<h1>Some variable was not defined.<h1>
-- stop rendering the rest of the template --
{% endif %}

{{ some_variable }} is defined here.

我问这个的原因很简单。
我不希望我的整个模板缩进一个或多个 if -statements,因为它很容易弄乱整个文件。

我知道解决方法是创建多个模板,但是一个简单条件的多个文件对我来说听起来有点矫枉过正。

如果这本身不存在,如果有人能告诉我如何实现,我可以为此创建一个扩展。

提前致谢!

附注不要回复 {% else %} ,这正是我在这里试图避免的事情......

最佳答案

您要求的内容不受 native 支持。
要实现这样的事情,你需要经历很多麻烦。

Twig 模板被编译成 PHP,由 Twig 它自己的基本模板扩展。在基本模板中查看时,您最终会看到函数 doDisplay将被调用。该函数的内容示例如下

    protected function doDisplay(array $context, array $blocks = array())
{
// line 1
echo "\t<div id=\"null_wrapper\">
\t\t<div class=\"invoice_price\">\t\t\t
\t\t\t<div>
\t\t\t\t";
// line 4
echo twig_escape_filter($this->env, $this->getAttribute((isset($context["forms"]) ? $context["forms"] : $this->getContext($context, "forms")), "getTextfield", array(0 => "#label_Quantity#", 1 => "txt_new_quantity", 2 => ((array_key_exists("txt_quantity", $context)) ? (_twig_default_filter((isset($context["txt_quantity"]) ? $context["txt_quantity"] : $this->getContext($context, "txt_quantity")), 1)) : (1)), 3 => ((array_key_exists("errors", $context)) ? (_twig_default_filter((isset($context["errors"]) ? $context["errors"] : $this->getContext($context, "errors")), "")) : ("")), 4 => "", 5 => "smallinput"), "method"), "html", null, true);
echo "
\t\t\t</div>
\t\t\t<div class=\"clear\"></div>
\t\t\t<div>
\t\t\t\t";
// line 8
echo twig_escape_filter($this->env, $this->getAttribute((isset($context["forms"]) ? $context["forms"] : $this->getContext($context, "forms")), "getTextfield", array(0 => "#label_Unit_price#", 1 => "txt_new_price_excl", 2 => ((array_key_exists("txt_new_price_excl", $context)) ? (_twig_default_filter((isset($context["txt_new_price_excl"]) ? $context["txt_new_price_excl"] : $this->getContext($context, "txt_new_price_excl")), "")) : ("")), 3 => ((array_key_exists("errors", $context)) ? (_twig_default_filter((isset($context["errors"]) ? $context["errors"] : $this->getContext($context, "errors")), "")) : ("")), 4 => "", 5 => "smallinput"), "method"), "html", null, true);
echo "<span>";
echo twig_escape_filter($this->env, getSiteConfigValue("CURRENCY"), "html", null, true);
echo "</span>
\t\t\t</div>
\t\t\t<div class=\"clear\"></div>
\t\t\t<div>
\t\t\t\t";

正如您所看到的,输出会立即发送到浏览器(并被基本模板中的 ob_start 捕获),因此即使您可以退出模板,也有可能最终导致 HTML 损坏。
TL:DR实现这种事情的唯一方法是覆盖 twig的编译器。 ,编译 twig模板导入 PHP ,也许您可​​以编写自己的节点,因为这也可以渲染/编译

关于twig - Symfony/Twig : Stop rendering the rest of a template,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39667058/

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