枝條做很多事情裏面:
- 加載(打開你的樹枝內容)
- 解析(從你的樹枝內容創建一個解析樹)
- 編譯當在檢測到
{% for %}
(瀏覽該樹來創建一個php文件)
- 緩存(存儲PHP文件某處,以避免重新編譯它下一次)
- 執行(執行生成的PHP文件)
解析時,Twig會遞歸調用令牌解析器直到找到{% endfor %}
並構建令牌樹。在你的情況下,它看起來像:
root
|
--- string
|
--- for
| |
| --- if
| |
| --- string
|
--- string
然後,Twig編譯器遞歸地跨過那棵樹並生成相應的php代碼。這樣一來,下面的嫩枝循環:
{% for i in 1..5 %}
Value = {{ i }}
{% endfor %}
編譯這個在PHP:
// line 1
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable(range(1, 5));
foreach ($context['_seq'] as $context["_key"] => $context["i"]) {
// line 2
echo "Value = ";
echo twig_escape_filter($this->env, $context["i"], "html", null, true);
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['_key'], $context['i'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
正如你所看到的,{% for %}
只不過是一個簡單的foreach
和嫩枝令牌更多的存儲到一棵樹,它在設計上不可能顯示位於一對打開/關閉標籤下方的內容。
我能看到的唯一可能是你在Twig中使用的一個標籤正在播放輸出緩衝,並且你在循環中使用的方法之一打破了ob堆棧(如ob_get_clean()
沒有任何例如,以前已經打開的ob_start()
)。
我的建議是將你的樹枝文件名存入你的緩存目錄(例如:grep -Ri 'test.twig' cache/
),以便將該文件編譯爲PHP,以便準確理解它的功能並對其進行調試。