【发布时间】:2014-03-12 09:12:00
【问题描述】:
假设我有一个 Product 类和一个 Category 类。每个产品都有 1 个类别。在产品列表(通过调用php app/console doctrine:generate:crud 生成)上,我想显示每个产品的类别名称。但是到目前为止我尝试过的所有方法都不起作用。
我正在使用 KnpPaginatorBundle(不知道它是否有所作为)。
这是控制器内部的代码:
// ProductController.php
public function indexAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
'SELECT p
FROM MyMainBundle:Product p
ORDER BY p.name'
);
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate($query, $request->query->get('page', 1), 10);
return $this->render('MyMainBundle:Product:index.html.twig', array(
'pagination' => $pagination,
));
}
这是模板内的代码:
{# index.html.twig #}
{% extends 'MyMainBundle::layout.html.twig' %}
{% block body -%}
<table>
<thead>
<tr>
<th>Name</th>
<th>Category</th>
</tr>
</thead>
<tbody>
{% for entity in pagination %}
<tr>
<td>{{ entity.name }}</td>
<td>{{ entity.category }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{{ knp_pagination_render(pagination) }}
{% endblock %}
我在 Category 类中添加了一个 __toString() 方法:
public function __toString()
{
return $this->getName();
}
但我收到以下错误:
对象“My\MainBundle\Entity\Product”的方法“category”在第 16 行的 MyMainBundle:Product:index.html.twig 中不存在
我尝试将LEFT JOIN p.category category 添加到我的查询中,但无济于事。
我尝试用{{ entity.category.name }} 替换{{ entity.category }},在这种情况下我得到:
对象“Proxies__CG__\My\MainBundle\Entity\Category”的方法“名称”在第 16 行的 MyMainBundle:Product:index.html.twig 中不存在
我尝试用{{ entity.getCategory }} 替换{{ entity.category }},在这种情况下我得到:
对象“My\MainBundle\Entity\Product”的方法“getCategory”在第 16 行的 MyMainBundle:Product:index.html.twig 中不存在
我尝试用{{ entity.getCategory() }} 替换{{ entity.category }},在这种情况下我得到:
MyMainBundle:Product:index.html.twig 中第 16 行的值“”(预期为“打印语句结束”)的意外标记“名称”
我应该如何显示类别名称?
【问题讨论】:
-
好像关联没有定义对。
标签: symfony doctrine-orm twig