Symfony2 在 Twig 模板中显示相关的实体属性



假设我有一个产品类和一个类别类。每个产品有 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 不喜欢并作为属性名称的一部分。

}}之前检查代码中是否没有不间断空格。

最新更新