防止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.titch:

Foo:

我希望输出为:

Foo:bar

但它却是:

Foo:
bar

有什么办法可以防止这种情况发生吗?Twig使用{%- ... -%}进行的空白控制并不影响这一点。

更新:

正如sjagr的回答中所提到的,事实上,在模板的末尾有一个额外的0x0a字符,即使使用:set binary,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:{# #}