3

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を使用することで得られる分離のレベルを維持したいと思っていました。

ありがとう!

4

2 に答える 2

1

聞きたい答えではないかもしれませんが、F3のテンプレートエンジンはひどい制限があるので、まったく使用しないことをお勧めします。F3自体は単純なプロジェクトでも問題ありません。幸い、使用するコンポーネントを選択できます。単純なPHPテンプレートは、どのテンプレートエンジンよりも優れており、小さなラッパーを使用すると、テンプレート内のF3変数に簡単にアクセスできます。テンプレートは次のようになります。

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

ラッパーは、テンプレートを含め、__getと__callを適切に実装する必要があります。

于 2011-04-04T07:47:54.567 に答える
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

于 2011-06-30T03:57:09.410 に答える