假设我有一个产品类和一个类别类。每个产品有 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 %}
我在类别类中添加了一个 __toString() 方法:
public function __toString()
{
return $this->getName();
}
但是我收到以下错误:
对象"My\MainBundle\Entity\Product"的方法"类别"在MyMainBundle:Product:index.html.twig第16行不存在
我尝试将LEFT JOIN p.category category
添加到我的查询中,但无济于事。
我尝试用{{ entity.category.name }}
替换{{ entity.category }}
,在这种情况下,我得到:
对象"Proxies__CG__\My\MainBundle\Entity\Category"的方法"name"在MyMainBundle:Product:index.html.twig第16行不存在
我尝试用{{ entity.getCategory }}
替换{{ entity.category }}
,在这种情况下我得到:
对象"My\MainBundle\Entity\Product"的方法"getCategory"在第16行的MyMainBundle:Product:index.html.twig中不存在
我尝试用{{ entity.getCategory() }}
替换{{ entity.category }}
,在这种情况下我得到:
第 16 行的 MyMainBundle:Product:index.html.twig 中值 " 的意外标记"名称"(预期"打印结束语句")
我应该如何显示类别名称?
我注意到在您的两条错误消息中:
对象"My\MainBundle\Entity\Product"的方法"类别"在MyMainBundle:Product:index.html.twig第16行不存在
和
对象"Proxies_CG_\My\MainBundle\Entity\Category"的方法"name"在MyMainBundle:Product:index.html.twig第16行不存在
方法名称和以下"
之间有一个空格。
这发生在我之前输入代码太快的时候:在键入属性名称后的空格之前,我按下了使 Twig}}
的键,所以我最终在属性和}}
之间有一个不间断的空格,Twig 不喜欢并作为属性名称的一部分。
在}}
之前检查代码中是否没有不间断空格。