ミニメモ
- View関連
- ViewRendererを使っていると、特別な処理をしないかぎり、どのアクションコントローラーでも同じviewインスタンスを使用する。ViewRendererのinitViewの最後の処理でセットされている。
- Viewに対して参照でモデルを投入する際は、コントローラー間の意図せぬ流出に気をつける必要がある。
- ActionController::_forwardやActionStack使用時、前のアクションのデータを残したくなければ、clearVarsしておく必要がある
- ActionStackや_forwardで、レスポンスオブジェクトのセグメントを直接指定することはできないが、ViewRendererにはsetResponseSegmentがあるので、レンダリング結果の振り分けには使える。
- ViewRendererを使わない場合は自前でviewオブジェクトを作るので、個別の設定になる。
- ViewRendererを使っていると、特別な処理をしないかぎり、どのアクションコントローラーでも同じviewインスタンスを使用する。ViewRendererのinitViewの最後の処理でセットされている。
- アクションヘルパーについて
- アクションヘルパーのヘルパーブローカーは、各アクションコントローラーにつき一つのインスタンスが作られる。(違うのはコントローラーだけなので、シングルトンでコントローラーを切り替えても同等だと思うんだが)
- ブローカー内のスタックはスタティックなので、ヘルパーはすべてのアクションコントローラーで同じインスタンスを利用することになる。したがって、あるコントローラーで与えたオプションは別のコントローラーでも適用されるので、オプションを保持させるようなヘルパーを作るときは要注意。
- 同様に、デフォルトではヘルパーブローカーのプラグインローダーもスタティックなので、プラグインローダーでスタティックレジストリを切り替えることによるヘルパーインスタンスの使い分けはできない。
- ルーターについて
- Zend_Controller_Router_Route_Chainでのルートの渡し方
- ルーターにルートを渡す際、$route->chain($innerRoute)のように、chainメソッドの返りオブジェクトを渡さなければいけないと、マニュアルにある。chainしてから$routeを渡すというのはNG。また、チェーン内のルートには完全一致しないとチェーンにマッチしたとは判断されない。chainルートを作成してaddRouteした方が割り切ってていいと思うんですが・・・
- Zend_Controller_Router_Route_Chainでのルートの渡し方
- リクエストオブジェクト
※アクションヘルパーがコントローラー間のカップリングに影響してしまうのは、やや疑問。知っていれば問題はないが。
このエントリーには随時、追加および削除していきます。