我可以在TWIG中使用变量吗?

时间:2012-08-23 08:20:08

标签: symfony twig

我使用symfony2和TWIG,我想使用一些全局变量指向页面中的平板电脑索引:

应用/配置/ parameters.ini

tab_branch="1"

应用/配置/ config.yml

twig:
    globals:
        tab_branch: %tab_branch%

的src / ACME / BranchBundle /控制器/ defaultController.php

/**
 * @Template()
 */
public function showAction($id) {
    ...
    return array(
        'tab' => 'tab_branch',
    );
}

的src / ACME / BranchBundle /资源/视图/默认/ show.html.twig

<input type="hidden" id="tablndex" value="{{ {{ tab }} }}" />  //not working

我真正想做的是让{{ tab }}解析为tab_branch,然后{{ tab_branch }}解析为1(就像$$foo一样PHP),我该怎么办?

3 个答案:

答案 0 :(得分:0)

这不能按照您尝试的方式完成,twig不会那样工作。如果tab没有多少可能的值,您可以执行以下操作:

{% if tab == 'tab_branch' %}
    {{tab_branch}}
{% else if tab == 'other_tab' %}
    {{other_tab}}
{% endif %}

我知道,不是很优雅......

答案 1 :(得分:0)

编写自定义函数以进行此类评估。

您可能对此提案感兴趣eval function

答案 2 :(得分:0)

我用twig语法在我的数据中的任何地方引用其他变量中的变量:

foo: "{{ bar.baz }}/quu.txt"
bar:
    baz: /tmp

然后我渲染,直到结果不再改变:

    while( $template !== ($result = $twig->render($template, $data)) )
    {
        $template = $result;
    }

这是

  • illlegant:每个变量值都应该在嵌入之前呈现
  • 不足:变量名在使用前不会呈现,因此foo。{{i}}将无法正常工作
  • simple:我不必引用过滤器或代码,只需引用变量。
  • small:上面的实现很简短,希望很清楚。也可以是单行递归方法。