symfony: 2009年3月アーカイブ
symfonyで出力エスケーピング機能を使っている時に生データを出力したい場合、変数であれば
<?php echo $sf_data->getRaw('name') ?>
で出せますが、オブジェクトの値は同じ方法で出すことができません。
テンプレート内で$sf_dataから一旦退避してとか、やり方を調べていたら以下のようにgetRawValueメソッドを使う取り方がありました。
<?php foreach ($members as $member): ?>
<?php echo $member->getRawValue()->getName() ?>
<?php endforeach; ?>
あー、何とか解決。
symfonyは自分が知らないだけで、こうしたいと思ったことの口は大抵用意されてるのでそれを見つけられるかどうかで書き方に差がでますね。
symfonyでライブラリクラスから生成したオブジェクトをserializeして保持する処理を考えていた時の作業録。
You cannot serialize or unserialize PDO instances
まず、オブジェクトをserializeしようとしたら上記エラーが出てしまいました。内部でDBのconnectionを持っている状態でserializeはできないようです。
とりあえず暫定策として__sleep関数を使って、必要なメンバ変数のみ取得できるようにして回避。
public function __sleep()
{
// シリアル化する対象の変数を指定
return array("id", "name", "email");
}
serializeデータにはクラス名と変数の情報しか保持していないので、データをunserializeして使う際にはスクリプト内で事前にクラス定義がされている必要があるようですが(PHP: オブジェクトのシリアル化 - セッションでのオブジェクト - Manual)、symfonyだとオートロードなのでその辺は意識しなくとも使えました。
$unserialize = unserialize($serialize);
//オブジェクトで持っていたメソッドが使える
echo $unserialize->getName();
__sleepで変数指定を調整すればデータ量も最小限に抑えられそうですし、なかなか良さげです。