phalcon volt побитовые операции?

Мне нужно запустить следующую логику в шаблонах volt, но, похоже, она ее не поддерживает. Любые идеи по обходным путям?

{% for index, p_key in partner_var %}
 <input id="{{ key }}[]" name="{{ key }}[]" value="{{ p_key.id }}" type="checkbox"  
{% if user.p_body  & (1 << (p_key.id - 1)) %}
   checked
{% endif %}>
{{ p_key.title }} 

завершается с ошибкой Ошибка сканирования до ' (1 ‹‹ (p_key.id.


person mahen3d    schedule 24.11.2015    source источник


Ответы (1)


Вы правы, Volt не поддерживает побитовые операторы. Одним из обходных путей является создание своих функций при объявлении voltService:

$di->setShared('view', function() {

    $view = new \Phalcon\Mvc\View();

    $view->registerEngines(array(
        '.volt' => 'voltService'
    ));

    return $view;
});

$di->set('voltService', function ($view, $di) {
    // ...

    $volt = new Phalcon\Mvc\View\Engine\Volt($view, $di);
    // ...

    $compiler = $volt->getCompiler();

    $compiler->addFunction('bit_and', function($resolvedArgs, $exprArgs) use ($compiler) {

        return sprintf(
            '(%s & %s)',
            $compiler->expression($exprArgs[0]['expr']),
            $compiler->expression($exprArgs[1]['expr'])
        );

    });

    return $volt;
});

использовать как функцию в шаблоне Volt

{% if bit_and(2, keyword.getFlags()) %}
    checked="checked"
{% endif %}
person yergo    schedule 24.11.2015