使用 TWIG 模板渲染干净整洁的 HTML


Rendering clean & tidy HTML with TWIG templates

我一直在使用Twig(版本 1.9.1)作为PHP模板引擎,我对渲染的HTML并不完全满意,因为添加了额外的不需要的换行符和空格,这使得结果非常不整洁。为了使我的模板更加灵活,我正在使用macros,它可以以嵌套的方式相互调用,这本身工作正常,但似乎使事情变得更糟。例如,<a>元素呈现如下:

             <a href="http://google.com" alt="some alternative text">                    some text with <strong>some html</strong>

</a>

我知道部分原因是我的twig模板的格式化方式,就像我删除空行并从中缩进一样,渲染HTML看起来更整洁,但并不完全:下面的输出显示了一个渲染<a>,元素的开始和结束之间仍有 2 个换行符, 尽管相应的模板不包含任何空行或空格!

<a href="http://google.com" alt="some alternative text">some text with <strong>some html</strong>

</a>

尽管它有帮助,但从我的twig模板中删除格式(即空行和缩进)并不是一个真正的选择,因为它使我的模板很难阅读和维护。

除了从模板中删除格式。 有什么方法可以用Twig渲染更干净/更整洁的 HTML?

文档的此页面应该可以帮助您控制标记中的空格 http://twig.sensiolabs.org/doc/templates.html#whitespace-control

我也想要正确的输出缩进,所以我为此做了一个扩展。我使它在一个要点中可用:https://gist.github.com/urraka/ccd1812570ca4b278b9f

有关一些说明,请参阅要点中的用法文件。

基本上,这个模板:

{# Given variable = "line1'nline2'nline3" #}
<body>
    {% if true %}
        <stuff>{% if true %}only blocks that take the whole line have effect{% endif %}</stuff>
        {{ variable }}
    {% endif %}
</body>

最终会是这样的:

<body>
    <stuff>only blocks that take the whole line have effect</stuff>
    line1
    line2
    line3
</body>

尽管不再维护此捆绑包,但使用 tidy_parse_string() 编写整洁服务可能是一个开始。KnpMarkupValidatorBundle