Отправка переменной из volt в пользовательскую функцию

Я создал пользовательскую функцию, к которой я могу получить доступ из файла volt. Функция работает нормально, но я не могу отправить переменную в функцию. Он отправляет переменную в виде текста вместо ее значения.

Функция ветки:

$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 %}

Ошибка, которую я получаю:

'Ошибка сканирования перед 'staff->id' при синтаксическом анализе: SELECT [Models\UserGroup].* FROM [Models\UserGroup] WHERE user_id = $staff->id (78)' (длина = 131)

Как видите, $staff->id не целое число, а текст.

Как мне отправить фактический идентификатор в функцию?

Кстати, я использую twig в сочетании с Phalcon и следую инструкциям в этой статье: http://phalcontip.com/discussion/60/extending-volt-functions


person Alvin Bakker    schedule 10.08.2016    source источник


Ответы (1)


Если вы выгрузите $user внутри своего метода public static function getUserGroup($user), вы получите этот $staff->id, но на самом деле вам нужно что-то вроде 42.

Чтобы избежать этого, зарегистрируйте функцию Volt следующим образом:

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

Дополнительная информация о расширении функций Volt

person Nikolay Mihaylov    schedule 10.08.2016
comment
Я бы никогда не догадался о такой логике, заключая все в кавычки. Но это сработало как шарм. Спасибо Николай - person Alvin Bakker; 10.08.2016
comment
Вот почему у нас есть документация :) - person Nikolay Mihaylov; 10.08.2016
comment
Не нашел эту страницу с помощью Google, поэтому большое спасибо ;) - person Alvin Bakker; 10.08.2016