Twig似乎在\n
的内容之后插入{% include %}
。我可以用这个简单的例子重现问题:
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
也未在VIM中显示。
知道我知道为什么会这样,但我仍然需要一个解决方案。使用十六进制编辑器检查所有模板不是一个可行的选择。
答案 0 :(得分:5)
您的文本编辑器会在.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:{# #}