1

カスタム関数の変数へのアクセスに問題があります。

私のコードは次のとおりです。

{{ myFunction(variableFromController) }}

そしてPHP:

$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

2

Volt (またはその他のエンジン) は、PHP 上のある種の追加レイヤーにすぎないため、コンパイラーに追加する関数はショートカットに似ています。彼らは自分で何かを「やっている」わけではありません。後で実行されるコードの一部を印刷しているだけです。

言い換えれば、これは悪いことです:

$compiler->addFunction('myFunction',function($resolvedArgs,$exprArgs)use($di,$compiler){
   // do stuff with $value
   return $someClass->someMethod($value);
});

そして、これは良いです:

$compiler->addFunction('myFunction',function($resolvedArgs,$exprArgs)use($di,$compiler){
   $arg = $compiler->expression($exprArgs[0]['expr']); $lang = $di->get('lang');
   return '\\My\\Class::staticMethod('.$arg.', '.$lang.')';
});

乾杯!

于 2014-08-14T23:26:31.347 に答える