Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 保持包含的细枝子模板的缩进级别_Symfony_Twig - Fatal编程技术网

Symfony 保持包含的细枝子模板的缩进级别

Symfony 保持包含的细枝子模板的缩进级别,symfony,twig,Symfony,Twig,我正在使用Twig模板引擎,并希望在下面的示例中包含一个子模板链接: <header> <div id="menu"> {% include 'menu.twig' %} </div> </header> {%include'菜单。细枝“%” 包含的文件包含以下代码: <ul> <li>item 1</li> <li>item 2</li> </ul&g

我正在使用Twig模板引擎,并希望在下面的示例中包含一个子模板链接:

<header>
  <div id="menu">
    {% include 'menu.twig' %}
  </div>
</header>

{%include'菜单。细枝“%”
包含的文件包含以下代码:

<ul>
  <li>item 1</li>
  <li>item 2</li>
</ul>
  • 项目1
  • 项目2
现在,Twig生成以下HTML代码:

<header>
  <div id="menu">
    <ul>
  <li>item 1</li>
  <li>item 2</li>
</ul>
  </div>
</header>

  • 项目1
  • 项目2
正如您所看到的,缩进级别仅适用于包含文件的第一行,这导致上面的代码非常不整洁,维护起来也很糟糕

如何才能从具有正确缩进的细枝中获得正确的输出

<header>
  <div id="menu">
    <ul>
      <li>item 1</li>
      <li>item 2</li>
    </ul>
  </div>
</header>

  • 项目1
  • 项目2

我认为在包含模板时没有办法保持缩进。我能想到的唯一解决方案是在变量中传递缩进级别,并在包含的模板中使用循环来为每行中的空白量添加前缀。显然,这种“解决方案”将是疯狂的,而且是一场噩梦

关于这一评论:“[…]这导致上面的代码非常不整洁,维护起来也很糟糕。”我想说以下几点:

  • HTML是否“不整洁”并不重要。浏览器不会抱怨,用户也不会看到
  • 这是真的,这是不好的维持。幸运的是,您维护的是对齐良好的细枝模板,而不是生成的HTML代码

如果细枝模板生成的格式要求“完美对齐”,则上述所有内容都会有所不同。但是对于HTML,请不要浪费时间对齐标记。

如果您只想保持所包含子模板的精确缩进,可以执行以下操作:

<header>
  <div id="menu">
{% include 'menu.twig' %}
  </div>
</header>

{%include'菜单。细枝“%”
i、 e.将所有“包含”指令放在行的开头。结果将是:

<header>
  <div id="menu">
<ul>
  <li>item 1</li>
  <li>item 2</li>
</ul>
  </div>
</header>

  • 项目1
  • 项目2
但不知怎的,我觉得这还不够好。 另一种解决方案是在子布局中添加缩进,即

    <ul>
      <li>item 1</li>
      <li>item 2</li>
    </ul>
  • 项目1
  • 项目2
但当然,只有当子布局始终包含在某个缩进级别时,它才会起作用


我建议您在生成响应后采用完全不同的路径并格式化响应,例如在kernel.response事件上使用侦听器。

在php中创建细枝环境后,您可以添加如下细枝过滤器:

$filter = new Twig_Filter('ident', function ($string, $number) {
    $spaces = str_repeat(' ', $number);
    return rtrim(preg_replace('#^(.+)$#m', sprintf('%1$s$1', $spaces), $string));
}, array('is_safe' => array('all')));

$Your_Twig_Environment->addFilter($filter);
在此之后,您可以像这样使用它:

{{ include('menu.twig')|ident(4) }}

(小心使用带有{{}的include函数语法,不要使用包含标记语法{%})

尽管大多数用户确实看不到它,但我经常会查看我欣赏的页面的HTML,看看我能从中收集到什么,用在我自己的网页中。如果HTML的格式不好(比如全部放在一行上或者缩进混乱),我很难从中找到任何东西。当我制作网页时,我希望它们格式良好,以便其他人可以从我的代码中学习。我不认为这是一种浪费。这就是为什么我也喜欢适当的缩进。我想知道为什么这对小树枝来说如此困难。它只需要为包含的文件中的所有行(不仅仅是第一行)保持缩进级别,一切都会很好。