2012-02-16 25 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