我将动态变量插入自定义伏特函数时遇到问题。
例如我有一个代码:
{{ 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”返回,因此我无法从变量中获取内容。
您知道如何将变量正确传递到自定义函数中,还是在访问时遇到问题?
感谢。
答案 0 :(得分:2)
我认为对Volt的功能存在误解。它看起来像是。您的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)语法编译器(您可以通过检查伏特的输出文件夹来检查它。所以它输出稍后用于渲染视图的PHP文件。
我发现将辅助对象添加到di容器对于复杂的操作更好。我可以在di容器中添加一个帮助器,如下所示:
如果上面的代码可以跳过所有myFunction
内容,只需使用lang
容器中的di
:
{{ lang.translate(variable) }}
因为您可以直接访问di中的所有服务。