繁体   English   中英

如何将数组从Symfony 2控制器传递到TWIG模板?

[英]How to pass an array from Symfony 2 controller to a TWIG template ?

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

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

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

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

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

怎么了?

是的,这段代码有效。 首先要检查的是你的TestBundle::search.html.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);

您甚至可以通过这个简单的语句让瓢虫将“已调试”变量加载到Symfony探查器中。

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

您现在可以从Symfony2探查器的选项卡直接访问该变量。 瓢虫可以做更多,但为此, 文档真的很好。

我想你必须改变这样的模板:

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

请参阅官方文档: 创建和使用模板 - >嵌入控制器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM