symfonyで自動エスケープ時に生のオブジェクトを取得する方法

symfonyで自動でエスケープをするように設定しておくとViewにアサインされた値がsfOutputEscaperオブジェクトに勝手に変換されるわけですが、それだと都合が悪い場合は往々にしてあるわけです。

例えば$variableという変数なら以下のようにしてとれます。

<?php echo $sf_data->getRaw('variable') ?>

今まではこれで事足りてたのですが、

<?php foreach ($collection as $var): ?>
<?php echo $var->getHtml() ?>
<?php endforeach ?>

このように直接アクションからアサインされていないオブジェクトは$sf_dataには入っていないので、先ほどのではできないわけです。

そこで調べたら一発でありました。

<?php foreach ($collection as $var): ?>
<?php echo $var->getRawValue()->getHtml() ?>
<?php endforeach ?>

sfOutputEscaperオブジェクトは内部で$valueというプロパティを持っており、そこに生の値を格納しています。それを取得するのがgetRawValueメソッドです。

なんか今まで$sf_dataから取得してたのがバカみたいじゃねーか・・・。何でもっと早く見ておかなかったんだ><