2015-11-24 56 views
5

我需要在伏模板中運行以下邏輯,但它似乎不支持它。任何有關變通辦法的想法?phalcon伏特按位操作?

{% 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。

回答

3

你是正確的,伏不支持位運算符。其中一個解決方法是創建功能聲明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; 
}); 

在伏模板函數中使用

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