如何从Twig模板中的相关对象输出数据?

时间:2012-09-20 22:47:56

标签: symfony twig

我仍然是Symfony2的新手,所以请放轻松我。我正试图通过一个航班表(用于机票预订系统),该表有几个相关领域,如航空公司和机场。我在自定义存储库中使用以下方法:

public function getAllFlights($limit = 100)
{
    $dql = 'SELECT f FROM Flightcase\BookingBundle\Entity\Flight f';

    $query = $this->getEntityManager()->createQuery($dql);
    $query->setMaxResults($limit);

    return $query->getResult();
}

并将getAllFlights()传递给我的Twig模板,如下所示:

$flights = $em->getRepository('FlightcaseBookingBundle:Flight')->getAllFlights();   

return $this->render('FlightcaseBookingBundle:Flight:list.html.twig', array('flights' => $flights));

Twig模板只是循环遍历$ flights集合中的项目,如下所示:

{% for flight in flights %}
<tr>
<td>{{ flight.airline }}</td>
<td>{{ flight.origin }}</td>
<td>{{ flight.destination }}</td>
<td>{{ flight.dateFrom }}</td>
<td>{{ flight.timeFrom }}</td>
<td>{{ flight.dateTo }}</td>
<td>{{ flight.timeTo }}</td>
</tr>
{% endfor %}

但是我得到了一个丑陋的,神秘的异常告诉我“类Proxies \ FlightcaseBookingBundleEntityAirlineProxy的对象无法转换为字符串”这让我相信我需要获取Airline对象中的特定属性例如IATA代码输出为字符串。但是如何在Twig模板中访问$ airline-&gt; getIataCode()?或者我的存储库中有一种方法可以将相关对象转换为字符串吗?

1 个答案:

答案 0 :(得分:5)

我假设航空公司是一个独立的实体,它与Doctrine中的Flight实体有关联。类似的东西:

class Airline
{
    private $id;
    private $name;
    private $flights;
    ...
}

这是对的吗?如果是这样,那就是你看到那个特定错误的原因。你给了Twig一个对象,然后告诉它打印出来......但这究竟是什么意思呢?

让我们假设您的课程如上所示,而您只是想打印出航空公司的名称。

你可以做以下两件事之一:

首先,您可以为对象提供toString()方法:

class Airline
    {
        public function toString()
        {
            return $this->getName();
        }
    }

或者,您可以为Twig提供一些可以使用的标量:将{{ flight.airline }}替换为{{ flight.airline.name }}

编辑:

刚看到您的Airline对象有一个名为$ IataCode的属性。在这种情况下,您可以使用{{ flight.airline.IataCode }}在Twig中呈现它。