5

我无法将数组从 symfony 2 控制器传递到 TWIG 模板。我在控制器中使用此代码:

$searchTerms['color'] = "Red";
return $this->render('TestBundle::search.html.twig', 
        array(
            "searchTerms" => $searchTerms));

在树枝模板中,我试图像这样访问变量:

  1. {{ searchTerms['color'] }}
  2. {{ searchTerms.color }}

两者都没有输出空字符串,所以看起来数组来到模板但它的元素是空的。

怎么了?

4

2 回答 2

9

是的,这段代码有效。首先要检查的是您的 twig 代码是否在正确的页面 ( TestBundle::search.html.twig) 中。这可能听起来很傻,但有时会发生......

如果这一切都很好,我建议您尝试在模板中进行调试。调试是最重要的。你在编程时总会遇到这种问题,尤其是当你尝试新东西的时候。您在调试代码方面做得越好,作为程序员的您就越好,因为您不可能在第一次就将所有事情都做好。

那么,如何调试呢?

要在您的 twig 模板中进行调试,您可以使用twig 的调试扩展。要激活调试选项,您必须快速更改配置文件。如果你迷路了,你也可以阅读这个帖子。

您可以像这样调试模板中的任何变量:

<pre>
{% debug searchTerms %}
</pre>

这样,您可以轻松调试变量并测试您的问题是什么:

{% debug searchTerms['color'] %}

如果您想快速调试,我强烈建议您使用LadyBugBundle。这是一个很棒的工具,可以让你做这样的事情:

在您的控制器中:

ladybug_dump($searchTerms);

在您的 TWIG 模板中:

{{ searchTerms|ladybug_dump }}

与经典选项没有什么不同var_dump,但如果您有长数组或对象,ladybug将会给您留下深刻印象。更重要的是,在控制器中,您经常需要在某个点停止代码以避免在您的调试语句之后加载页面,这对于瓢虫来说相当容易:

ladybug_dump_die($searchTerms);

你甚至可以用这个简单的语句让ladybug将“debugged”变量加载到Symfony profiler 中。

$this->get('ladybug')->log($searchTerms);

您现在可以从 Symfony2 分析器的选项卡直接访问该变量。 Ladybug可以做更多的事情,但为此,文档非常好。

于 2012-09-11T01:44:18.893 回答
3

我认为您必须像这样更改模板:

{% for item in searchTerms %}
    {{ item.color }}<br/>
{% endfor %}

见官方文档:Creating and using Templates->embedding-controllers

于 2012-10-22T11:09:20.350 回答