PHP胖免费“设置”与关闭

时间:2011-02-20 05:56:55

标签: php frameworks closures fat-free-framework

有没有人知道如何使用F3 :: set在模型/视图中分配然后使用闭包?或者提供以下方案的解决方案?

我正在使用1.4.4版

这是我正在尝试做的事情:

//In Model - Loaded from controller w/ F3::call
F3::set('getPrice', function($tax, $profile){
//return price
});

//In View - Inside an F3:repeat of @products
{@getPrice(@product.tax, @product.profile)}

但是似乎不支持闭包......如果我使用require / include加载模型,定义没有F3 :: set的函数,并在视图中启用用户定义的函数,我可以使它工作。但我希望通过使用F3 :: call / F3 :: set来保持分离水平。

谢谢!

2 个答案:

答案 0 :(得分:1)

也许不是你想听到的答案但是:F3的模板引擎是非常严格的限制,因此我建议不要使用它。 F3本身对于简单的项目是可以的,幸运的是你可以选择你想要使用的组件。简单的PHP模板仍然可以击败任何模板引擎,只需一个小包装器就可以轻松访问其中的F3变量。您的模板可能看起来像这样:

<?= $this->getPrice($this->product->tax, $this->product->profile) ?>

包装器只需要包含模板并适当地实现__get和__call。

答案 1 :(得分:1)

好的,因此版本1.4.4不支持此功能,但版本2.0支持此功能。感谢2.0中的精彩更新!这是匿名功能支持:

控制器 -

F3::set('func',
    function($a,$b) {
        return $a.', '.$b;
    }
);

模板 -

{{@func('hello','world')}}

这是对象支持:

$foo=new stdClass;
$foo->phrase='99 bottles of beer';
F3::set('myvar',$foo);

{{@myvar->phrase}}

http://fatfree.sourceforge.net/page/views-templates