2012-02-16 58 views
6

我正嘗試使用FatFree框架並嘗試使用模板引擎。我渲染用下面的代碼模板 -FatFree模板中的PHP代碼

echo Template::serve('template.php'); 

,我要面對的是,裏面的template.php文件中標籤識別的F3,但任何PHP代碼無法正常工作的問題。例如,如果我在template.php文件中下面的代碼 -

<?php 
if (F3::get('var') == 'var1') { 
    ?> 
    <span>var1 is present</span> 
    <?php 
} else { 
    ?> 
    <span>var1 not present</span> 
    <?php 
} 
?> 

這裏既有var1 is presentvar1 not present和不考慮var值的打印。此外,PHP的循環不工作 - 所以基本上所有的PHP代碼不工作。

但是,如果我用<F3:check>來編寫上面的PHP代碼,那麼一切工作正常。我們不能在模板中使用PHP代碼。如果是這種情況,這是一個嚴重的限制。

+0

這是有趣的...我尋找到它。我現在正在使用它,尚未測試它的這一方面。 – 2012-02-21 03:15:22

+0

是的,如果你使用模板,你不能使用PHP,而你需要使用f3模板標籤。如果您需要使用PHP作爲我認爲的模板引擎,則需要使用View。但我沒有看到任何缺點。 – amilaishere 2016-12-12 06:24:14

回答

8

我找到了答案,雖然我不太喜歡它。

有兩個不同的功能,F3::render()Template::serve()

隨着F3::render()您可以評估PHP表達式,並使用F3::get()檢索變量。根據網站:"The only issue with embedding PHP code in your templates is the conscious effort needed to stick to MVC principles"

Template::serve()僅適用於模板。其意義僅僅在於處理模板語言。

因此,基本上,是的它吮吸並沒有什麼意義,你可以評估F3::render() PHP代碼,你不能使用模板變量({{@var}}) - 或 - 您可以使用Template::serve(),你是僅限於調用PHP函數,而不是真正評估PHP代碼。

+0

感謝您的回答。我認爲我可以忍受這一點,儘管這是一個關於框架本身的嚴肅問題。沒有其他框架(例如Pylons)那樣做。你說可以調用PHP函數。那些功能在哪裏,我怎麼稱呼他們? – Siddharth 2012-02-21 14:21:32

+5

你可以調用任何函數'{{date('m/d/Y',@ timestamp)}}'或者我使用在index.php頁面中定義的創建函數來爆炸數據,{{exploded(@delim, @短語,0)}}'。我認爲最主要的是'{{}}'本質上就是短標籤'',所以你可以在括號中做任何事情,你可以用短標籤來做。 – 2012-02-21 17:06:51

+0

我不認爲它很糟糕,而是另一個似乎是「有意設計」來限制模板/視圖(雙關意圖)中的「胖」(即PHP)的例子。通過的條件段和通過的可重複段,模板中不需要太多PHP代碼,並且如果需要複雜的PHP,則可以在其所屬的控制器中對其進行評估並在模板中將其作爲變量進行訪問。UI設計人員不需要關注編程,程序員可以將注意力集中在後端,因此更好的代碼分離。 – nikolaosinlight 2016-09-12 02:47:30

0

也許嘗試使用不同的模板引擎,這將允許您更容易定義塊變量的依賴關係?

例如在PHPTAL http://phptal.org/manual/en/split/tal-condition.html你可以做這樣的:

<div tal:condition="php: var == 'var1'"> 
.... 
</div> 
+0

爲什麼?無脂肪的內置模板引擎已經具備了條件段邏輯,因爲即使是OP也提到了自己,它們完美地解決了它們的問題。我認爲問題在於OP更喜歡將PHP放在他們的模板中,如果您考慮設計與編程以及關注點w.r.t的關係,這不一定是好事。 MVC。 – nikolaosinlight 2016-09-12 02:52:18