我对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-> getIataCode()?还是我的存储库中有一种方法可以将相关对象转换为字符串?

最佳答案

我假设航空公司是一个单独的实体,该实体与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中对其进行渲染。

10-07 20:29