无脂肪模板中的PHP代码

无脂肪模板中的PHP代码,php,fat-free-framework,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> &

我正在尝试使用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
}
?>

var1出现了
var1不存在
在这里,
var1存在
var1不存在
都被打印出来,与var的值无关。此外,php for循环不起作用-因此基本上所有的php代码都不起作用


但是,如果我使用
编写上述PHP代码,那么一切都可以正常工作。我们不能在模板中使用PHP代码。如果是这样的话,这是一个严重的限制。

我已经找到了答案,尽管我真的不喜欢它

有两个不同的函数,
F3::render()
Template::service()

使用
F3::render()
可以计算PHP表达式并使用
F3::get()
检索变量。根据网站:
“在模板中嵌入PHP代码的唯一问题是需要有意识地坚持MVC原则”

Template::service()
仅用于模板制作。这意味着它只是处理模板语言


因此,基本上,是的,它很糟糕而且没有意义,您可以在
F3::render()
中评估PHP代码,并且不能使用模板变量(
{{@var}}
)-或者-您可以使用
模板::服务()
,并且您仅限于调用PHP函数,而不是真正地评估PHP代码。

也许可以尝试使用不同的模板引擎,这样可以更容易地定义块变量依赖关系

例如,在PHPTal中,您可以这样做:

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

....

它是未记录的,但您可以将代码放入模板中的
{~}
,并在编译模板时将其转换为
(使用v3.6)


e、 g.
{~@color='red'~}
将成为有趣的

。。。我正在调查。我现在正在使用它,还没有测试它的这方面。是的,如果你使用模板,你不能使用PHP,你需要使用f3模板标记。我认为,如果需要使用PHP作为模板引擎,就需要使用View。但我没有看到任何负面影响。谢谢你的回答。我认为我可以接受这一点,尽管这是一个关于框架本身的严肃问题。没有其他框架(例如,塔架)能做到这一点。你说可以调用PHP函数。这些函数位于何处,我如何调用它们?您可以调用任何函数
{date('m/d/Y',@timestamp)}
,或者我使用index.php页面中定义的已创建函数分解数据,
{exploded(@delim,@phrase,0)}
。我认为最主要的是
{}
本质上是短标记
,因此你可以在括号中做任何你可以用短标记做的事情。我不认为这很糟糕,但它是另一个似乎是“有意设计”的例子,以限制模板/视图中的“fat”(即PHP)(双关语)。使用条件段via和可重复段via,模板中应该不太需要PHP代码,如果需要复杂的PHP,则在它所属的控制器中对其进行评估,并将其作为模板中的变量访问。更好的代码分离,因为UI设计师不需要关心编程,程序员可以专注于后端。为什么?无脂肪内置模板引擎已经有了条件段逻辑,甚至OP也提到了它们自己,这完美地解决了它们的问题。我认为问题是OP更倾向于将PHP放在他们的模板中,如果考虑到设计和编程和分离关注W.R.T.MVC,这不是一件好事。