アクションクラスの拡張
例えば、id:kunitさんのActiveGatewayを使えるようにすることを考えてみる。
まず、通常のMoony_Actionのサブクラスを作成、標準でActiveGatewayのインスタンス生成:
class EnhancedAction extends Moony_Action { function execute($request, $session, $view) { $gw =& new ActiveGateway(); $gw->setDSN('mysql://id:password@host/db'); $this->process($request, $session, $view, $gw); } /** * @abstract */ function process($request, $session, $view, $gw) {} }
個別のアクションクラスは上記EnhancedActionのサブクラスとして実装する。例えば:
class FooAction extends Moony_EnhancedAction { function process($request, $session, $view, $gw) { // 処理を記述 $id = $request->get('user_id'); // リクエストパラメータ取得 $user = $gw->find('user', $id); // idをキーにuserテーブル検索 $view->assign('user_name', $user->name); // テンプレートに設定 $view->forward(); // テンプレートFoo.tpl表示 } }
もちろん、ActiveGateway以外のライブラリ(PEAR::DB、PDOとか)を共通で使用したい場合も同様。フレームワーク側で用意されているアクションクラスを継承、カスタマイズしていくのはStrutsの定石のひとつ。