我正在尝试使用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 present
和var1 not present
。此外,php for循环不起作用 - 所以基本上所有的PHP代码都无法正常工作。
但是,如果我使用<F3:check>
编写上面的PHP代码,那么一切正常。我们不能在模板中使用PHP代码吗?如果是这种情况,这是一个严重的限制。
答案 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' ?>