我是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()。我认为从数据库中提取项目以将它们包含在菜单中是常见的,所以如果有人对这个问题很熟悉,我将非常感谢您的帮助。
感谢。
答案 0 :(得分:1)
最简单的方法是在布局中放置一个渲染标记,并引用一个运行查询并呈现菜单片段的控制器。
{% render 'SomeBundle:Menu:menu' %}