防止 Twig 在 {% include %} 之后插入换行符

Prevent Twig from inserting line break after {% include %}

Twig 似乎在 {% include %} 的内容后插入了一个 \n。我可以用这个简单的例子重现这个问题:

test.php:

<?php

require "vendor/autoload.php";

$loader = new Twig_Loader_Filesystem(__DIR__);
$twig = new Twig_Environment($loader, []);

echo $twig->render('test.twig', ['foo' => 'bar']);

test.twig:

{% include "include.twig" %}{{ foo }}

include.twig:

Foo:

我希望输出为:

Foo:bar

而是:

Foo:
bar

有什么办法可以防止这种情况发生吗? {%- ... -%} 的 Twig 空白控件对此没有影响。

更新:

正如 sjagr 的回答中提到的,实际上在模板末尾有一个额外的 0x0a 字符,即使 :set binary.[=20= 也没有显示在 VIM 中]

知道我知道为什么会这样,但我仍然需要一个解决方案。用十六进制编辑器检查所有模板不是一个可行的选择。

您的文本编辑器正在 .twig 文件的末尾附加一个换行符。

当我使用常规文本编辑器或 nano 时,我可以重现问题中描述的问题。 include.twig 文件的十六进制总和显示换行符:

$ xxd -p include.twig
466f6f3a0a

为了证明文本编辑器正在插入这些换行符,我删除了 include.twig 文件并制作了一个 generate.php 文件:

file_put_contents('include.twig', 'Foo:');

新的十六进制和:

$ xxd -p include.twig
466f6f3a

以及新的 Twig 输出:

Foo:bar

自己试试吧!

有趣的是,您可以让 Twig 在包含模板文件时通过在文件末尾添加空白注释来忽略尾随换行符:

Foo:{# #}