我对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();
}
Run Code Online (Sandbox Code Playgroud)
并将getAllFlights()传递给我的Twig模板,如下所示:
$flights = $em->getRepository('FlightcaseBookingBundle:Flight')->getAllFlights();
return $this->render('FlightcaseBookingBundle:Flight:list.html.twig', array('flights' => $flights));
Run Code Online (Sandbox Code Playgroud)
而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 %}
Run Code Online (Sandbox Code Playgroud)
但是我得到一个丑陋的,神秘的异常告诉我"类代理\ FlightcaseBookingBundleEntityAirlineProxy的对象无法转换为字符串"这使我相信我需要获取Airline对象中的特定属性,例如IATA代码以字符串形式输出.但是如何在Twig模板中访问$ airline-> getIataCode()?或者我的存储库中有一种方法可以将相关对象转换为字符串吗?
我假设航空公司是一个独立的实体,它与Doctrine中的Flight实体有关联.就像是:
class Airline
{
private $id;
private $name;
private $flights;
...
}
Run Code Online (Sandbox Code Playgroud)
那是对的吗?如果是这样,那就是你看到那个特定错误的原因.你给了Twig一个对象,然后告诉它打印出来......但这究竟是什么意思呢?
我们假设您的班级如上所示,而您只是想打印出航空公司的名称.
你可以做两件事之一:
首先,您可以为对象提供toString()方法:
class Airline
{
public function toString()
{
return $this->getName();
}
}
Run Code Online (Sandbox Code Playgroud)
或者,你可以给Twig一些标量的东西:替换{{ flight.airline }}为{{ flight.airline.name }}.
编辑:
刚看到你的Airline对象有一个名为$ IataCode的属性.在这种情况下,您将使用Twig在Twig中渲染它{{ flight.airline.IataCode }}.
| 归档时间: |
|
| 查看次数: |
6779 次 |
| 最近记录: |