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で変数指定を調整すればデータ量も最小限に抑えられそうですし、なかなか良さげです。

このアーカイブについて

このページには、2009年3月以降に書かれたブログ記事のうちsymfonyカテゴリに属しているものが含まれています。

前のアーカイブはsymfony: 2009年2月です。

次のアーカイブはsymfony: 2009年4月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

symfony: 2009年3月: 月別アーカイブ

RSSフィード

  • 購読する

いろいろ

あわせて読みたい

フィードメーター - ポップフライ

seo

Powered by Movable Type 4.01