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

时间:2014-03-12 09:12:01

标签: symfony doctrine-orm twig

我们说我有一个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 %}

我已将__toString()方法添加到Category类:

public function __toString()
{
    return $this->getName();
}

但是我收到以下错误:

  

方法&#34;类别&#34;对象&#34;我的\ MainBundle \ Entity \ Product&#34;在MyMainBundle中不存在:产品:第16行的index.html.twig

我尝试在我的查询中添加LEFT JOIN p.category category,但无济于事。

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

  

方法&#34;名称&#34; for object&#34; Proxies__CG __ \ My \ MainBundle \ Entity \ Category&#34;在MyMainBundle中不存在:产品:第16行的index.html.twig

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

  

方法&#34; getCategory&#34;对象&#34;我的\ MainBundle \ Entity \ Product&#34;在MyMainBundle中不存在:产品:第16行的index.html.twig

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

  

意外的令牌&#34;名称&#34;价值&#34; &#34; (&#34;打印声明结束&#34;预期)在MyMainBundle:产品:index.html.twig第16行

我该如何显示类别名称?

1 个答案:

答案 0 :(得分:1)

我在两条错误消息中都注意到了这一点:

  

方法&#34;类别&#34;对象&#34;我的\ MainBundle \ Entity \ Product&#34;在MyMainBundle中不存在:产品:第16行的index.html.twig

  

方法&#34;名称&#34; for object&#34; Proxies_ CG _ \ My \ MainBundle \ Entity \ Category&#34;在MyMainBundle中不存在:产品:第16行的index.html.twig

方法名称与以下"之间有空格。

在我输入代码太快之前发生了这件事:在键入属性名称后面的空格之前,我按了键来制作Twig }},所以我最终在属性之间有一个不间断的空格以及}},Twig不喜欢并将其作为属性名称的一部分。

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