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は自分が知らないだけで、こうしたいと思ったことの口は大抵用意されてるのでそれを見つけられるかどうかで書き方に差がでますね。
自分的に何か当てるために大事なことっていうのは、
- 確実にニーズがあると分かっているものを作る
- 自分が面白いと思うものを作る
の2つのパターン。
前者は当然多くの競争相手がいる領域ですから体力勝負ができるところにお任せするしかなく、自分みたいに非力な小市民は深いこと考えず好きなものを思ってるように作って、ニッチであれメジャーであれそれで共感が呼べればその時結果的に成功に繋がるんだろうなと。
誰もしていないことを発掘するとか、新しいビジネスモデルを作り出すとかいう発想もあるでしょうが、それ自体を意図的に目的化して行動するもんじゃなくて、ある日突然にアイデアが生まれるとか、もともとそういう発想が生み出せるセンスがあるとかじゃないとできないことに思います。
ユーザ不在の興味も湧かない案件の話を聞いて思考停止してしまうような自分を省みて、つくづく自分は会社に貢献するタイプじゃないなあということから、こんな時間にぐだぐだ考えたりしたこと。
Prototype Window ClassというPrototype.jsベースのポップアップウィンドウを手軽に作れるライブラリを試していたのですが、IEで実行するとどうしてもポップアップ起動時にjavascriptエラーが出てしまう。
呼び出し方を中心にいろいろ探るもなかなか原因がつかめなかったのですが、最終的にprototype.jsのバージョンが原因っぽいことが判明。
実行環境にはprototype.js最新版1.6.0.3を入れていましたが、その環境だとエラーになるようで、1.5系かまたは1.6系なら1.6.0に落とすとエラーが出なくなりました。よく見たらそもそも同梱されていたprototypeは、1.5.1_rc3でした。
正常には動くようになりましたが、最新版でエラーが出てしまうのとか、しばらく更新も止まっていそうだし、ちょっと動きももっさり感があるし、ということでもう一つどうかなあという印象。
ところでサンプルにあったMr.proto。この人は何者ですか(笑)
という件で、数時間たっぷりはまってしまいました。
「hoge_test」みたいなホスト名をhostsで指定してアクセスするようなローカルのテスト環境を作っていて、自分が動作確認していた時には問題無かったのに、同じ様な環境を用意したチームのメンバーがテストするとセッション機能が思うように動作しない。
始めはちゃんと動くはずという先入観で、単にソースが同期されていないのでは、とかPHP周りの設定が違っていないかとか、違う方向に頭が行っててどうにも糸口がつかめなかったのですが、ようやく動作しているのはFirefoxで実行した時であること、IEからだとセッション発行時にCookieが作られていないことに気付きます。
それをキーワードに調べを進めたところ、表題の件が判明したというわけです。ホスト名を「hogetest」のような名前に修正したらあっさり解決・・・。確認した限り、サブドメインやドメインにアンダーバーを含むアクセス時にはIE6、IE7ではcookieが作られませんでした。(Firefoxはその点ゆるいようですね。)
そもそもRFC的にドメイン名のアンダーバーの使用は許されていないようで、それに準拠したIEの納得の仕様というわけだったんですね。どうせテスト環境だとアクセスできているのをいいことに、全くもって名前に気を配っていなかった自分に反省。
「小田急なりきりグッズ」はかなり買いたいかも - ポップフライ
先日から気になっていた段ボール製の電車「Dan-Train 3000形」が発売されたので早速購入してみました。
製作時間10分程度とどこかの記事で目にしていたのですが、説明書の絵が小さくてちょっと見にくかった(特にパーツDの後部ポケット部分への入れ方にはしばらく悩んでしまった・・・)のと、息子に邪魔されながらもあって、20分程かけてようやく完成。
Dan-Train 3000形
色味が無いのでシンプルですが(自由に色を塗って欲しいという意図だそうです)、見た目もかわいらしいし肩から紐で吊るというアナログ感もいい感じに仕上がっています。
ただできあがってさあ遊ぼうとしてみたら、なぜかかぶるのを嫌がってしまう息子・・・。もう少し時間をかけて慣らしていくことにします(笑)
余談ですが、昼間、息子と近所の公園に出かけたら桜がきれいに咲いていました。天気も良くてきれいだったなあ。
桜
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で変数指定を調整すればデータ量も最小限に抑えられそうですし、なかなか良さげです。