3

私はまだ 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 のオブジェクトを文字列に変換できませんでした」という醜い不可解な例外が発生し、IATA コードなどの Airline オブジェクト内の特定のプロパティを取得して文字列として出力する必要があると思われます。しかし、Twig テンプレート内の $airline->getIataCode() にアクセスするにはどうすればよいでしょうか? または、リポジトリに関連オブジェクトを文字列に変換する方法はありますか?

4

1 に答える 1

5

Airline は、Doctrine の Flight エンティティに関連付けられた別のエンティティであると想定しています。何かのようなもの:

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

あれは正しいですか?もしそうなら、それがその特定のエラーが表示されている理由です。あなたは Twig にオブジェクトを与え、それを出力するように指示しています... しかし、それは正確にはどういう意味ですか?

あなたのクラスが上記のようなもので、航空会社の名前を出力しようとしているだけだと仮定しましょう。

次の 2 つのいずれかを行うことができます。

まず、オブジェクトに toString() メソッドを与えることができます:

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

または、Twig に何かスカラーを指定して動作させることもでき{{ flight.airline }}ます{{ flight.airline.name }}

編集:

Airline オブジェクトに $IataCode というプロパティがあることがわかりました。その場合、 を使用して Twig でレンダリングします{{ flight.airline.IataCode }}

于 2012-09-20T23:15:28.807 に答える