将变量从伏特发送到自定义函数

Sending variable from volt to custom function

我创建了一个可以从伏特访问的自定义函数。该函数似乎工作正常,但我无法将变量发送给该函数。它将变量作为文本而不是其值发送。

树枝函数:

$volt->getCompiler()->addFunction('getusergroup', function ($user) {
    return \Models\User::getUserGroup($user);
});

模型中的函数:

public static function getUserGroup($user) {
    return UserGroup::find(array('conditions' => 'user_id = ' . $user));
}

Twig 中调用函数的行:

{% for member in getusergroup(staff.id) %}
    {{ member.Group.name }}
{% endfor %}

我得到的错误:

'Scanning error before 'staff->id' when parsing: SELECT [Models\UserGroup].* FROM [Models\UserGroup] WHERE user_id = $staff->id (78)' (length=131)

如您所见,$staff->id 不是整数,而是文本。

如何将实际 ID 发送到函数?

顺便说一句,我将 twig 与 Phalcon 结合使用,并按照本文中的说明进行操作:http://phalcontip.com/discussion/60/extending-volt-functions

如果您在方法 public static function getUserGroup($user) 中转储 $user,您将收到此 $staff->id,但您实际上想要的是 42.

要避免这种情况,请像这样注册 Volt 函数:

$volt->getCompiler()->addFunction('getusergroup', function ($resolvedArgs, $exprArgs) {
    return 'Models\User::getUserGroup(' . $resolvedArgs . ')';
});

有关 Extending Volt Functions

的更多信息