Moony
Moonyは、PHPで記述されたWebアプリケーションフレームワークです。 ちょっとしたWebサイトを作る際に、構築のベースにできるようなフレームワークを目指しています。
開発日誌を書いています: Moony::log
動作環境
- PHP 4.3.x以上 (PHP 5.xでも動作します)
- .htaccessが設置可能であること
- mod_rewriteの機能が使用できること
インストール
以下、インストールと動作確認の手順です。 ローカル環境(localhost)の /moony にインストールすると仮定して記述しています。
- 最新版のパッケージをダウンロード
- ダウンロードしたファイルを展開
- 展開したファイルをApacheのDocumentRoot直下の /moony に配置
- 以下のディレクトリに書き込み権限を付与
- /moony/log
- /moony/webapp/work
- Smartyをダウンロード、ライブラリを /moony/lib/smarty に配置
- http://localhost/moony/ にアクセス
- 「Welcome! -> Sample」と表示されることを確認
- 「Sample」に設定されたリンクを選択、http://localhost/sample.html にアクセス
- 「Welcome! This is...」と表示されることを確認
ディレクトリ構成
-+- [_codegen] -+- [skelton] --+- action.skl | | +- template.skl | +- generate.php +- [lib] ------+- [moony] ----+- [core] -+- Moony_Action.php | | | +- Moony_Controller.php | | | +- Moony_Request.php | | | +- Moony_Session.php | | | +- Moony_View.php | | +- [util] -+- Moony_ErrorHandler.php | | | +- Moony_Logger.php | | +- Moony_Config.php | +- [smarty] | +- .htaccess +- [log] -------- .htaccess +- [webapp] ---+- [action] ---+- HomeAction.php | | +- SampleAction.php | +- [template] -+- Home.tpl | | +- Sample.tpl | +- [work] | +- .htaccess +- .htaccess +- dispatcher.php
/_codegen はスケルトンの自動生成のためのディレクトリです。 /webapp/action、/webapp/template には初期状態でサンプルアプリケーションが格納されています。
アプリケーション構築手順
/test/archives/20051201.html というURLでアクセス可能なページを作るものとします。
- 以下のコマンドでスケルトンを自動生成します。
cd /path/to/_codegen /path/to/php generate.php TestArchives
- 以下2つのファイルが生成されたことを確認します。
- /webapp/action/TestArchivesAction.php
- /webapp/template/TestArchives.tpl
- TestArchivesActionクラスのexecuteメソッドに必要な処理を記述します。パラメータは以下の3つです。
- $request - リクエストパラメータが格納されているクラス
- $session - セッション情報へのアクセサ
- $view - Smartyを利用したテンプレート制御クラス
- URLとして渡されたパラメータはクラス変数、$_paramsに格納されています。
$date = $this->_params[0];
-
リクエストパラメータを取得するためには以下のように記述します。
パラメータのサニタイズはNullバイト文字列の除去以外行っていません。必要に応じて処理してください。
$name = $request->get('name');
- セッションを利用する場合は以下のように記述します。
$session->set('foo', $foo); $foo = $session->get('foo');
- テンプレートに値を設定する場合は以下のように記述します。
$view->assign('foo', $foo);
- 最終的にテンプレートを表示させる場合、以下のように記述します。
$view->forward();
- 条件によって表示させるテンプレートを変更したい場合、例えば TestArchivesError.tpl を表示する場合は以下のように記述します。
$view->forward('error');
動作概要
- /foo.htmlにアクセスがあった場合、mod_rewriteによって/dispatcher.php?/fooにリクエスト内容が書き換えられる。
- dispatcher.phpはMoony_Config.phpをincludeして、動作に必要な設定を行う。
- dispatcher.phpはMoony_ErrorHandlerのインスタンスを生成、registerメソッドを呼び出して、エラーハンドラの設定を行う。
- エラーが発生した場合、Moony_Loggerを用いてロギング処理が行われる。その後、httpのステータスで500(Internal Server Error)を返す。
- dispatcher.phpはMoony_Controllerのインスタンスを生成、ストリング(/foo)を受け渡す。
- Moony_Controllerは渡されたクエリーストリングを解析、アクション名称を決定する。
- /fooの場合、アクション名称はFoo
- /foo/barの場合、アクション名称はFooBar
- Moony_ControllerはMoony_Requestのインスタンスを生成、リクエストパラメータを格納する。
- Moony_ControllerはMoony_Sessionのインスタンスを生成、セッションを開始する。
- Moony_ControllerはMoony_Viewのインスタンスを生成、アクション名称を受け渡す。
- Moony_Viewの内部ではSmartyのインスタンスが生成される。
- Moony_Controllerはアクション名称に従ってアクションサブクラス。
- アクション名称がFooの場合、FooAction.phpというファイルをincludeして、インスタンスを生成しようとする。
- アクションクラスのファイルが引数なしで呼び出して処理を終了する。
- 無条件にFoo.tplという名称のテンプレートファイルを表示する。
- テンプレートファイルが存在しない場合は、httpのステータスで404(Not Found)を返す。
- アクションクラスのインスタンス生成に成功した場合、アクションクラスのexecuteメソッドを呼び出す。 引数として、先ほど生成したMoony_Request、Moony_Session、Moony_Viewのインスタンスをそれぞれ受け渡す。 また、クエリーストリングで渡されたパラメータをアクションクラスのメンバー変数、$_paramsにセットする。
- アクションクラス、またはそこから呼び出されたロジックの処理を行う。
- Moony_Viewのassignメソッドを用いて、テンプレートに必要な値をそれぞれ設定する。
- Moony_Viewのforwardメソッドを呼び出して、処理を終了する。
- 引数なしの場合、無条件にFoo.tplという名称のテンプレートファイルを表示する。
- 引数に例えば'bar'を指定した場合、FooBar.tplという名称のテンプレートファイルを表示する。
- テンプレートファイルが存在しなかった場合は、httpのステータスで404(Not Found)を返す。
CVSリポジトリ
CVSのリポジトリを公開しています。 匿名チェックアウトするには:
cvs -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/moony login cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/moony co Moony
ライセンス
MoonyはPHPライセンスに基づいて配布されています。
作っている人
Moonyは猫耳舎の 山岡広幸が個人的に作成しているアプリケーションです。
変更履歴
詳細に関してはパッケージに同梱されているCHANGELOGを参照してください。
- version 0.5.4 (2005-12-25)
- dispatcher.phpのtypoバグ修正
- Moony_Viewクラスのメソッドシグネチャ変更: isCached -> hasCached
- version 0.5.3 (2005-12-22)
- ライセンスをBSDライセンスからPHPライセンスに変更
- テンプレートのコンパイル先とキャッシュ先の初期設定値変更
- /lib、/log、/webappの各ディレクトリに.htaccessファイルを配備、直接アクセスを無効化
- version 0.5.2 (2005-12-15)
- セッションIDを常に再生成する仕組みを実装
- HTTPヘッダに「X-Framework: Moony/[version]」を出力するように変更
- Moony_Config.phpに設定項目追加
- Moony_Viewクラスにメソッド追加、Smartyのキャッシュ機能を利用できるように
- アクションクラスがない場合、Moony_Config.phpの設定次第でテンプレートをキャッシュするように
- Moony_Viewクラスのメソッドシグネチャ変更: display -> _display
- サンプルアプリケーションでセッションを使用、テンプレートのキャッシュを扱うように
- version 0.5.1 (2005-12-12)
- /_codegen/generate.phpのバグ修正
- Moony_Config.phpでアクションクラスの拡張子を設定できるように
- version 0.5.0 (2005-12-11)
- クラス名・定数名変更、接頭辞に「MOONY_」を付加
- エラー発生時のエラー画面遷移処理を廃止、HTTPのステータスで500を返すように
- アクションクラスとテンプレートファイルの両方が存在しない場合、HTTPのステータスで404を返すように
- データベースアクセスユーティリティの廃止、任意のライブラリを使用可能に
- Moony_Config.phpでSmartyのクラスの配置位置を設定できるように
- Moony_Requestクラスのメソッドシグネチャ変更: getParameter -> get
- Moony_Actionクラスのメンバ変数名称変更: $_parameters -> $_params
- version 0.3.1 (2005-12-07)
- ディレクトリ名称を英語の単数形に変更
- version 0.3 (2005-12-05)
- ディレクトリ構造を大幅に変更
- version 0.1 (2005-11-24)
- ファーストリリース