2006-06-05
_ lighttpd+fastcgi+php(Zend Framework)+のrewrite設定
最初、
url.rewrite = ( ".*\.(js|ico|gif|jpg|png|css)$" => "$0", "" => "/index.php" )
としていたんだけど、$_GETが取れないことに気がついた。パラメータはほとんどルーターレベルで解決していたから、ずっと気づかないでいたよ。ひとまず、
url.rewrite = ( ".*\.(js|ico|gif|jpg|png|css)$" => "$0", ".*" => "/index.php$0" )
とかやってごまかしてみた(「/foo?bar=123」が「/index.php/foo?bar=123」なんて感じになるんで、一応QUERY_STRINGは妥当な内容になるはず)けど、ちゃんと「?」以降だけを渡すようにした方がいいんだろうな。
_ 今朝渋谷駅南口側歩道橋で
白いワンピースを着た女の子が、手を鳥のようにゆっくり羽ばたかせながら、歩道橋を歩いて渡っていく、という撮影をやっていたんだけど、あれはアイドルか何か? どう見ても既知外系にしか見えない絵面だったんだけど、そういう映画とかかなー。スタッフの人数が結構多かったから、エロ系ではなさそうなんだけど。
_ 145キロのデッドボール
昨日久しぶりにバッティングセンターに行ったところ、145km/hのマシンがあったんで、話のたねにやってみた。すると、4、5球目にピッチングマシンの投げた球が、タイミング良く隣の人が打った打球にかすり、ほんのわずかに軌道が変わった球が、もろに俺に向かってやってきた。そんなのよけれねーよっ! というわけで、見事に左脇腹に当たった。しょせん軟球だし、145km/hとか書いてあっても実際にはそんなに出ていないとは思うけれども、いまだに当たったところがかなり痛い。ビデオとかに撮っていたら、その手のテレビ番組とかに送ってもいいくらい、レアな出来事だ。っつーか、今年はどうやら悪い方に当たり年らしい。
2007-06-05
_ ようやくViewの初期化手順が分かった
標準設定状態でのView周りの初期化処理の流れがようやく理解できた。
- Zend_Controller_Front::__construct()で、viewRendererがZend_Controller_Action_HelperBroker::addHelper()される
- Zend_Controller_Front::dispatch()内で、Zend_Controller_Dispatcher::dispatch()される
- Zend_Controller_Action::__construct()が実行され、その中でZend_Controller_Action_HelperBroker::__construct()が実行される
- Zend_Controller_Action_HelperBroker::__construct()内で、viewRenderer::init()が実行される
- viewRenderer::init()内で、viewRenderer::initView()が実行される
- 初回のviewRenderer::initView()でのみ、Zend_Viewオブジェクトが生成され、2回目以降は作成済みのZend_Viewオブジェクトを使い回す
- viewRenderer::initView()内では、Zend_Viewオブジェクトの生成以外のViewの設定(現在のリクエストに対応したパスの解決など)は、毎回(_forward()されるたびに)行われる
- viewRenderer::initView()内で、Zend_Controller_Action::$viewにviewRendererの持つViewオブジェクトをセットする
- これで、アクションコントローラ内のメソッドでは、$this->viewで、viewRendererと共通のViewオブジェクトを利用することができる
なのね。てっきりZend_Controller_Action::initView()の方がメインだと思って、それが呼ばれる場所を探していたよ。Zend_Controller_Action::initView()の方は、viewRendererがない場合用のZend_View生成場所なのね。
ただ、viewRendererの有無を意識したくなければ、アクションコントローラ内では直接$this->viewを使わず、$this->initView()経由でViewオブジェクトを扱うようにした方がいいのかな?
あと、こういう仕組みならば、viewRendererを利用している場合に限り、カスタムView(たとえばZend_View_Smarty)をあらかじめviewRenderer::setView()しておくことで、アクションコントローラ内で$this->viewとか$this->initView()とかして使うことができそうだ。viewRendererを使わない場合は、Zend_Controller_Action::initView()とかを書き直したアクションコントローラを使う必要が出てくるんだろう。


