渲染清洁&使用TWIG模板整理HTML

时间:2012-08-09 07:35:37

标签: php templates twig

我一直在使用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?

3 个答案:

答案 0 :(得分:4)

本文档的这一页应该可以帮助您控制标记http://twig.sensiolabs.org/doc/templates.html#whitespace-control

中的空格

答案 1 :(得分:1)

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

请参阅gist中的用法文件以获得一些解释。

基本上,这个模板:

{# 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>

答案 2 :(得分:0)

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