Moony
Moonyは、PHPで記述されたWebアプリケーションフレームワークです。 ちょっとしたWebサイトを作る際に、構築のベースにできるようなフレームワークを目指しています。
開発日誌を書いています: Moony::log
動作環境
- PHP 4.3.x以上 (PHP 5.xでも動作するはずです)
- .htaccessが設置可能であること
- mod_rewriteの機能が使用できること
インストール
以下、インストールと動作確認の手順です。 ローカル環境(localhost)の /moony にインストールすると仮定して記述しています。
- 最新版のパッケージをダウンロード
- ダウンロードしたファイルを展開
- 展開したファイルをApacheのDocumentRoot直下の /moony に配置
- 以下のディレクトリに書き込み権限を付与
- /moony/app/work
- /moony/log
- 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 +- [app]--- ---+- [action] ---+- HomeAction.php | | +- SampleAction.php | +- [template] -+- Home.tpl | | +- Sample.tpl | +- [work] | +- .htaccess +- [lib] ------+- [moony] ----+- [core] -+- Moony_Action.php | | | +- Moony_Context.php | | | +- Moony_Controller.php | | | +- Moony_Request.php | | | +- Moony_Session.php | | | +- Moony_View.php | | +- [util] -+- Moony_ErrorHandler.php | | | +- Moony_Logger.php | | +- Moony.php | | +- Moony_Config.php | +- [smarty] | +- .htaccess +- [log] -------- .htaccess +- .htaccess +- dispatcher.php
/_codegen はスケルトンの自動生成のためのディレクトリです。 /app/action、/app/template には初期状態でサンプルアプリケーションが格納されています。
アプリケーション構築手順
/test/archives/20051201.html というURLでアクセス可能なページを作るものとします。
- 以下のコマンドでスケルトンを自動生成します。
cd /path/to/_codegen /path/to/php generate.php TestArchives
- 以下2つのファイルが生成されたことを確認します。
- /app/action/TestArchivesAction.php
- /app/template/TestArchives.tpl
- TestArchivesActionクラスのexecuteメソッドに必要な処理を記述します。パラメータは以下の3つです。
- $context - コンテキストが格納されているクラス
- $view - Smartyを利用したテンプレート制御クラス
- URLとして渡されたパラメータは$contextに格納されています。
$date = $context->getUrl(2); // $date = 20051201
-
リクエストパラメータを取得するためには以下のように記述します。
パラメータのサニタイズはNullバイト文字列の除去以外行っていません。必要に応じて処理してください。
$request = $context->getRequest(); $name = $request->get('name');
- セッションを利用する場合は以下のように記述します。
$session = $context->getSession(); $session->set('foo', $foo); $foo = $session->get('foo');
- テンプレートに値を設定する場合は以下のように記述します。
$view->assign('foo', $foo);
- 条件によって表示させるテンプレートを変更したい場合、例えば Error.tpl を表示する場合は以下のように記述します。
TestArchives.tplを表示させる場合はこの処理は必要ありません。Moony側であらかじめ設定されています。
$view->setTemplate('Error.tpl');
動作概要
- /foo.htmlにアクセスがあった場合、mod_rewriteによって/dispatcher.php?/fooにリクエスト内容が書き換えられる。
- dispatcher.phpはMoony.phpをinclude、Moonyクラスのインスタンスを生成する。
- Moonyはクエリー文字列を解析、アクション名称を決定してMoony_Controllerのインスタンスを生成する。
- /fooの場合、アクション名称はFoo
- /foo/barの場合、アクション名称はFooBar
- Moony_ControllerはMoony_ErrorHandlerのインスタンスを生成、registerメソッドを呼び出して、エラーハンドラの設定を行う。
- エラーが発生した場合、Moony_Loggerを用いてロギング処理が行われる。その後、httpのステータスで500(Internal Server Error)を返す。
- Moony_ControllerはMoony_Requestのインスタンスを生成、リクエストパラメータを格納する。
- Moony_ControllerはMoony_Sessionのインスタンスを生成、セッションを開始する。
- Moony_ControllerはMoony_Contextのインスタンスを生成、Moony_RequestとMoony_Sessionのインスタンスを格納する。
- Moony_ControllerはMoony_Viewのインスタンスを生成、デフォルトでアクション名称と同一のテンプレート名称を設定する。
- アクション名称がFooの場合、設定されるテンプレート名称はFoo.tpl
- Moony_Viewの内部ではSmartyのインスタンスが生成される。
- Moony_Controllerはアクション名称に従ってMoony_Actionのサブクラスをincludeしてインスタンス生成を試みる。
- アクション名称がFooの場合、FooAction.phpというファイルをincludeして、インスタンスを生成しようとする。
- アクションクラスのファイルが存在しない場合、Moony_Viewのdisplayメソッドを呼び出して処理を終了する。
- テンプレートファイルが存在しない場合は、httpのステータスで404(Not Found)を返す。
- アクションクラスのインスタンス生成に成功した場合、アクションクラスのexecuteメソッドを呼び出す。 引数として、先ほど生成したMoony_Context、Moony_Viewのインスタンスを受け渡す。
- アクションクラスの処理を行う。
- Moony_Viewのassignメソッドを用いて、テンプレートに必要な値をそれぞれ設定する。
- Moony_ControllerはMoony_Viewのdisplayメソッドを呼び出して、処理を終了する。
- テンプレートファイルが存在しなかった場合は、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.6.0 (2006-01-07)
- ディレクトリ名変更: /webapp -> /app
- Moonyクラス追加
- Moony_Contextクラス追加
- Moony_Actionクラスのexecuteメソッドの引数変更
- Moony_Viewクラスのメソッドforward廃止
- Moony_ViewクラスにメソッドsetTemplate、disable、isDisabled追加
- Moony_Viewクラスのメソッドシグネチャ再変更: hasCached -> isCached
- Moony_Requestクラスにメソッドexists追加
- Moony_SessionクラスにメソッドgetId、exists追加
- 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)
- ファーストリリース