【问题标题】:Symfony2 - Twig Function returning an arraySymfony2 - Twig 函数返回一个数组
【发布时间】:2013-06-18 16:10:09
【问题描述】:

我创建了一个 Twig 扩展,它返回我拥有的所有博客的列表。这个列表是我在我的 twig 模板中循环的一个数组。

这是我的扩展:

<?php
// src/OSC/BlogBundle/Twig/BlogsListExtension.php
namespace OSC\BlogBundle\Twig;

class BlogsListExtension extends \Twig_Extension
{
    public function getFunctions()
    {
        return array(
            'blogsList' => new \Twig_Function_Method($this, array($this, 'blogsList')),
        );
    }



    public function blogsList()
    {

        $em = $this->getDoctrine()
        ->getManager();
        $repository = $em
            ->getRepository('OSCBlogBundle:Blog');


        $blogs = $repository->findBy(array('visibleState' => true));
        usort($blogs, array("\OSC\BlogBundle\Controller\BlogController", "orderBlogByTitle"));


        return $blogs;
    }

    public function getName()
    {
        return 'osc_BlogsListExtension';
    }
}

这是我在 services.yml 中添加的内容

services:
    osc_blog.blogsList_extension:
        class: OSC\BlogBundle\Twig\BlogsListExtension
        tags:
            - { name: twig.extension }

在我的树枝模板中,我想做以下事情:

<ul>
        {% for blog in blogsList()|sort %}
         <li><a href="{{ path('osc_blog_homepage', {'blogId': blog.id })}}"><span>{{ blog.title }}</span></a></li>
        {% endfor %}
        </ul>

我收到以下错误:

模板编译过程中抛出异常 ("注意:数组到字符串的转换

最后,我的问题是如何将数组传递给变量,以便在树枝模板中循环遍历它?

【问题讨论】:

  • 你做过调试吗? var_dump($blogs) 的输出是什么?它是一个数组吗?还有为什么会有双重排序?首先在 php 文件 (useort) 中,然后在 for 语句中。
  • $blogs 是一个返回所有博客对象的数组
  • 发布的代码是整个树枝模板吗?
  • @mattexx 不,不是。但这是在停止工作之前唯一改变的事情。

标签: php symfony twig


【解决方案1】:

这应该发生,因为blogsList() 返回一个ArrayCollection,它充当一个数组,但它不是。

根据this issue,你应该这样做:

public function blogsList()
{
    // ...
    return $blogs->toArray();
}

【讨论】:

  • 即使按照您的建议(也清除缓存),我仍然收到同样的错误...为什么它告诉我要将数组转换为字符串?
  • 很奇怪 - 一定要处理一个正确的数组,然后考虑返回一个你想要的数据的模拟,以便查看问题所在。
  • 以前,我只是将变量 blogs 传递给每个模板,但它变得越来越重,并且每次都重复代码。但是,当传递博客并循环通过它(不使用 toArray)时,它起作用了......
猜你喜欢
  • 2013-05-30
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 2012-04-01
  • 1970-01-01
  • 2023-04-08
  • 2014-09-16
相关资源
最近更新 更多