1

我创建了一个 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>

我收到以下错误:

编译模板时抛出异常(“注意:数组到字符串的转换

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

4

1 回答 1

2

这应该会发生,因为blogsList()返回一个ArrayCollection, 它充当数组,但事实并非如此。

根据这个问题,你应该这样做:

public function blogsList()
{
    // ...
    return $blogs->toArray();
}
于 2013-06-18T16:25:13.263 回答