Phalconphp FW定制伏特函数并将变量插入函数中

时间:2014-08-10 03:12:19

标签: php phalcon volt

我将动态变量插入自定义伏特函数时遇到问题。

例如我有一个代码:

{{ 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”返回,因此我无法从变量中获取内容。

您知道如何将变量正确传递到自定义函数中,还是在访问时遇到问题?

感谢。

1 个答案:

答案 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中的所有服务。