Symfony2 - 返回数组的Twig函数

时间:2013-06-18 16:10:10

标签: php symfony 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 }

在我的twig模板中,我想执行以下操作:

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

我收到以下错误:

  

在编译模板期间抛出了异常   (“注意:数组转换为字符串

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

1 个答案:

答案 0 :(得分:2)

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

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

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