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 的功能存在误解。看起来是这样。您的 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 容器更适合复杂的操作。我可以为 di 容器添加一个助手,如下所示:

提供上面的代码,您可以跳过所有myFunction内容并langdi容器中使用:

{{ lang.translate(variable) }}

因为您可以直接从 di 访问所有服务。

于 2014-08-10T10:54:25.023 回答