我创建了一个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>
我收到以下错误:
在编译模板期间抛出了异常 (“注意:数组转换为字符串
最后,我的问题是如何将数组传递给变量以便在树枝模板中循环它?
答案 0 :(得分:2)
这应该发生,因为blogsList()
返回ArrayCollection
,它作为一个数组,但它不是。
根据this issue,您应该这样做:
public function blogsList()
{
// ...
return $blogs->toArray();
}