【问题标题】:Symfony2 display related entity property in Twig templateSymfony2 在 Twig 模板中显示相关实体属性
【发布时间】: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


【解决方案1】:

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

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

和

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

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

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

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

【讨论】:

  • 没错。我使用的是法语键盘 (AZERTY),所以我必须使用 AltGr 键入右大括号。事实证明,我过早按下了 AltGr 一个字符,并且在 Ubuntu 中,AltGr+Space 会产生一个不间断的空格。在阅读您的帖子之前,我实际上发现了不间断的空间,但 StackOverflow 不允许我在发布后 8 小时内回答我自己的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多