我们可以让 twig 在编译时而不是在渲染时删除空格吗?
Can we make twig remove whitespace when it's compiled, rather than when it's rendered?
Twig 有 {% spaceless %}
标签,它删除了 HTML 标签之间的所有白色 space。
但是,它会在您呈现模板时使用 preg_replace 执行此操作。适用于小文件,但如果您有大型复杂模板,则会影响性能。
我觉得应该可以在编译时去掉白色space?
我编译的模板充满了类似
的东西
echo " <h2>Heading</h2>
";
模板包含以下内容:
<section>
<h2>Heading</h2>
</section>
我想要的最终渲染 HTML 是
<section><h2>Heading</h2></section>
为什么 twig 不能(非常简单地)在构建编译模板时添加一个 trim
,给我们:
echo "<h2>Heading</h2>";
编译模板中php代码。
我知道我在 {{ }}
中填充模板的任何数据中仍然可能有白色 space,但我可以通过我的 PHP 轻松控制它。
尝试使用 Twig 库中的 trim 函数
trim - Documentation - Twig - The flexible, fast, and secure PHP template engine
好的,在库中进行了大量挖掘以试图找出哪些文件生成输出的哪些位之后,我终于找到了这个 "fix"。
改变
->string($this->getAttribute('data'))
到
->string(trim(preg_replace('/>\s+</', '><', $this->getAttribute('data'))))
第 30 行/lib/Twig/Node/Text。php。
正确执行此操作会得到 "spaceless" 输出,但不需要昂贵的模板渲染时间 preg_replace 调用。
会不会出问题?可能在某些用例中,可能带有部分 <pre>
或 <textarea>
标记。不过,我看不出这些对我来说是个问题。
有没有我没有想到的陷阱?
如果模板源代码中有空格,最适合您需求的工具是 Twig 的空白控制功能:http://twig.sensiolabs.org/doc/templates.html#whitespace-control
如果空格在输出中显示的变量中,您应该使用 trim 过滤器(或 trim 变量,然后再将其传递给 Twig,无论如何都会做同样的事情)
Twig 有 {% spaceless %}
标签,它删除了 HTML 标签之间的所有白色 space。
但是,它会在您呈现模板时使用 preg_replace 执行此操作。适用于小文件,但如果您有大型复杂模板,则会影响性能。
我觉得应该可以在编译时去掉白色space?
我编译的模板充满了类似
的东西 echo " <h2>Heading</h2>
";
模板包含以下内容:
<section>
<h2>Heading</h2>
</section>
我想要的最终渲染 HTML 是
<section><h2>Heading</h2></section>
为什么 twig 不能(非常简单地)在构建编译模板时添加一个 trim
,给我们:
echo "<h2>Heading</h2>";
编译模板中php代码。
我知道我在 {{ }}
中填充模板的任何数据中仍然可能有白色 space,但我可以通过我的 PHP 轻松控制它。
尝试使用 Twig 库中的 trim 函数
trim - Documentation - Twig - The flexible, fast, and secure PHP template engine
好的,在库中进行了大量挖掘以试图找出哪些文件生成输出的哪些位之后,我终于找到了这个 "fix"。
改变
->string($this->getAttribute('data'))
到
->string(trim(preg_replace('/>\s+</', '><', $this->getAttribute('data'))))
第 30 行/lib/Twig/Node/Text。php。
正确执行此操作会得到 "spaceless" 输出,但不需要昂贵的模板渲染时间 preg_replace 调用。
会不会出问题?可能在某些用例中,可能带有部分 <pre>
或 <textarea>
标记。不过,我看不出这些对我来说是个问题。
有没有我没有想到的陷阱?
如果模板源代码中有空格,最适合您需求的工具是 Twig 的空白控制功能:http://twig.sensiolabs.org/doc/templates.html#whitespace-control
如果空格在输出中显示的变量中,您应该使用 trim 过滤器(或 trim 变量,然后再将其传递给 Twig,无论如何都会做同样的事情)