Fat Free模板中的PHP代码

时间:2012-02-16 10:01:16

标签: php fat-free-framework

我正在尝试使用FatFree框架并尝试使用模板引擎。我使用以下代码渲染模板 -

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
}
?>

无论var的值如何,都会打印var1 is presentvar1 not present。此外,php for循环不起作用 - 所以基本上所有的PHP代码都无法正常工作。

但是,如果我使用<F3:check>编写上面的PHP代码,那么一切正常。我们不能在模板中使用PHP代码吗?如果是这种情况,这是一个严重的限制。

3 个答案:

答案 0 :(得分: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代码。

答案 1 :(得分:0)

也许尝试使用不同的模板引擎,这将允许您更容易地定义块变量依赖?

例如在PHPTal http://phptal.org/manual/en/split/tal-condition.html中你可以这样做:

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

答案 2 :(得分:0)

它没有记录,但是您可以将代码放在模板的{~ ~}中,并且在编译模板时(使用v3.6)它将转换为<?php ?>

例如{~ @color = 'red' ~}将成为<?php $color = 'red' ?>