2015-11-25 51 views
2

Twig具有{% spaceless %}標籤,該標籤將刪除HTML標籤之間的所有空白區域。我們可以讓它在編譯時刪除空白,而不是在它被渲染時刪除空白嗎?

但是,當您渲染模板時,它會使用preg_replace執行此操作。罰款小文件,但如果你有一個大型複雜的模板有性能問題。

我覺得應該可以在編譯時去掉空白字符?

我編譯模板是充滿了東西一樣

 echo " <h2>Heading</h2> 
"; 

當模板已經包括了以下內容:

<section> 
    <h2>Heading</h2> 
</section> 

我想最終呈現的HTML是

<section><h2>Heading</h2></section> 

爲什麼不能在構建編譯模板的時候添加trim,以獲得giv e我們:

echo "<h2>Heading</h2>"; 

在編譯的模板php代碼中。

我知道在之內填充模板的任何數據中仍然可能有空格,但是我可以輕鬆地從PHP中控制它。

回答

1

OK,經過多次挖庫試圖找出哪些文件生成它的輸出位,我終於發現了這個「修復」。

變化

->string($this->getAttribute('data')) 

->string(trim(preg_replace('/>\s+</', '><', $this->getAttribute('data')))) 

在/lib/Twig/Node/Text.php 30行。

這樣做會正確地給我一個「無空間」輸出,但不需要昂貴的模板渲染時間preg_replace調用。

它會導致問題嗎?可能在某些使用情況下,可能使用部分<pre><textarea>標記。儘管如此,我看不出這兩個問題。

任何我還沒有想到的陷阱?

+0

不錯的主意,你應該在Symfony或Twig問題隊列中提出這個選項。 – JamesWilson

0

您需求的工具,如果空間在模板源是嫩枝的空白控制功能:http://twig.sensiolabs.org/doc/templates.html#whitespace-control

如果空間是在輸出顯示的變量的存在,你應該使用調整濾波器(或者在將它傳遞給Twig之前修改該變量,無論如何都會這樣做)

+0

我不確定這是正確的工具嗎?我正在談論我的樹枝模板中無用的HTML空白。我剛剛編輯了這個問題,使其更清晰一些。 – Codemonkey