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 に答える