Symfony2在细枝模板中显示相关实体属性

Symfony2在细枝模板中显示相关实体属性,symfony,doctrine-orm,twig,Symfony,Doctrine Orm,Twig,假设我有一个Product类和一个Category类。每个产品有一个类别。在产品列表上(通过调用php-app/console-doctor:generate:crud生成),我想显示每个产品的类别名称。然而,到目前为止我所尝试的一切都不起作用 我正在使用KnpPaginatorBundle(不知道它是否有区别) 以下是控制器内部的代码: // ProductController.php public function indexAction(Request $request) { $

假设我有一个Product类和一个Category类。每个产品有一个类别。在产品列表上(通过调用
php-app/console-doctor: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 %}
但我得到了以下错误:

第16行MyMainBundle:Product:index.html.twig中不存在对象“My\MainBundle\Entity\Product”的方法“category”

我已尝试将
LEFT JOIN p.category
添加到我的查询中,但没有成功

我尝试将
{{entity.category}}
替换为
{{entity.category.name}
,在这种情况下,我得到:

第16行的MyMainBundle:Product:index.html.twig中不存在对象“代理\uuuuu CG\uuu\ My\MainBundle\Entity\Category”的方法“名称”

我尝试用
{{entity.getCategory}}
替换
{{entity.getCategory}}
,在这种情况下,我得到:

第16行MyMainBundle:Product:index.html.twig中不存在对象“My\MainBundle\Entity\Product”的方法“getCategory”

我尝试将
{{entity.category}}
替换为
{{entity.getCategory()}}
,在这种情况下,我得到:

MyMainBundle:Product:index.html.twig第16行的值为“”的意外标记“name”(“应为打印结束语句”)


如何显示类别名称?

我注意到在您的两条错误消息中:

第16行MyMainBundle:Product:index.html.twig中不存在对象“My\MainBundle\Entity\Product”的方法“category”

第16行MyMainBundle:Product:index.html.twig中不存在对象“Proxies\CG\uu\My\MainBundle\Entity\Category”的方法“name”

方法名称和下面的
之间有一个空格

以前,当我太快地键入代码时,这种情况就发生了:在键入属性名称后的空格之前,我按下键使细枝
}
,因此我在属性和
}
之间有一个不间断的空格,细枝不喜欢该空格,并将其作为属性名称的一部分


检查在
}

之前的代码中是否没有不间断的空格。似乎关联的定义不正确。完全正确。我使用的是法语键盘(),所以我必须使用AltGr来键入结束的花括号。结果是我过早地按了AltGr一个字符,在Ubuntu中,AltGr+空格会产生一个不间断的空格。我在阅读你的文章之前发现了这个不间断的空格,但StackOverflow不允许我在发布后8小时内回答我自己的问题。
public function __toString()
{
    return $this->getName();
}