在扩展到Symfony2中的另一个树枝模板时无法获取数据库对象

时间:2012-01-26 04:32:00

标签: database templates symfony fetch twig

我是Symfony2的新手(具有1.2-1.4的知识)并且在尝试从数据库中获取某些对象时遇到了一些麻烦。我有一个基本模板(index.html.twig),它具有以下代码块:

<nav>
<ul class="menu">
<li><a class="active" href="index.html">Home Page</a></li>

{% for category in categories %}  
<li><a href="{{ category.name }}">{{ category.name }}</a></li>
{% endfor %}

<li class="last-item"><a href="contacts.html">Contact Us</a></li>
</ul>
</nav>

获取类别的方法在DefaultController中:

public function indexAction()
{
        $em = $this->getDoctrine()->getEntityManager();

        $categories = $em->getRepository('XxxYyyBundle:Category')->findAll();
        $genres = $em->getRepository('XxxYyyBundle:Genre')->findAll();

        echo $categories.$genres;

        return array('categories' => $categories, 'genres' => $genres);
}

如果我从Default访问该页面它可以正常工作,但如果我尝试从另一个扩展模板的页面访问(使用{%extends“XxxYyyBundle:Default:index.html.twig”%}),我会得到以下内容错误:

XxxYyyBundle中不存在变量“类别”:默认值:第53行的index.html.twig

我尝试了书中包含的所有选项(%include等),唯一的结论是从另一个页面中没有执行indexAction()。我认为从数据库中提取项目以将它们包含在菜单中是常见的,所以如果有人对这个问题很熟悉,我将非常感谢您的帮助。

感谢。

1 个答案:

答案 0 :(得分:1)

最简单的方法是在布局中放置一个渲染标记,并引用一个运行查询并呈现菜单片段的控制器。

{% render 'SomeBundle:Menu:menu' %}