0

カスタムボルト関数に動的変数を挿入する際に問題があります。

たとえば、私はコードを持っています:

{{ myFunction(variableFromController) }}

そして変数にアクセスします:

$compiler->addFunction('myFunction',function($resolvedArgs,$exprArgs)use($di,$compiler){
    $arg = $compiler->expression($exprArgs[0]['expr']);
    $lang = $di->get('lang');
    echo $lang->translate($arg);
});

問題は、コンパイラが変数を文字列「$variableFromController」として返すため、変数からコンテンツにアクセスできないことです。

カスタム関数に正しい変数を渡す方法を知っていますか、またはアクセスに問題がありますか?

ありがとう。

4

1 に答える 1

3

ボルトの機能とは何かについて誤解があると思います。みたいですね。Volt 関数は、PHP で評価できる文字列を返す必要があります。Phalcon のドキュメントの例:

$compiler->addFunction('widget', function($resolvedArgs, $exprArgs) {
    return 'MyLibrary\Widgets::get(' . $resolvedArgs . ')';
});

それに基づいて、関数が返されるはずだと思います(ただし、これはテストしていません):

$compiler->addFunction('myFunction',function($resolvedArgs,$exprArgs)use($di,$compiler){
    $arg = $compiler->expression($exprArgs[0]['expr']);
    return '$this->lang->translate(' . $arg . ');';
});

これは、Volt が PHP テンプレートに対する Volt (Twig) 構文のコンパイラとして機能するためです (これは、volt の出力フォルダーを調べることで確認できます。後でビューのレンダリングに使用される PHP ファイルを出力します)。

ヘルパー オブジェクトを di コンテナーに追加すると、複雑な操作に適していることがわかりました。以下のように、コンテナを終了するヘルパーを追加できます。

上記のコードがあれば、すべてをスキップしてコンテナーからmyFunction使用することができます。langdi

{{ lang.translate(variable) }}

ビュー内の di からすべてのサービスに直接アクセスできるためです。

于 2014-08-10T10:54:25.023 に答える