Moony

Moonyは、PHPで記述されたWebアプリケーションフレームワークです。 ちょっとしたWebサイトを作る際に、構築のベースにできるようなフレームワークを目指しています。

  1. 動作環境
  2. インストール
  3. ディレクトリ構成
  4. アプリケーション構築手順
  5. 動作概要
  6. CVSリポジトリ
  7. ライセンス
  8. 作っている人
  9. 変更履歴

開発日誌を書いています: Moony::log

動作環境

インストール

以下、インストールと動作確認の手順です。 ローカル環境(localhost)の /moony にインストールすると仮定して記述しています。

  1. 最新版のパッケージをダウンロード
  2. ダウンロードしたファイルを展開
  3. 展開したファイルをApacheのDocumentRoot直下の /moony に配置
  4. 以下のディレクトリに書き込み権限を付与
  5. Smartyをダウンロード、ライブラリを /moony/lib/smarty に配置
  6. http://localhost/moony/ にアクセス
  7. 「Welcome! -> Sample」と表示されることを確認
  8. 「Sample」に設定されたリンクを選択、http://localhost/sample.html にアクセス
  9. 「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でアクセス可能なページを作るものとします。

  1. 以下のコマンドでスケルトンを自動生成します。
    cd /path/to/_codegen
    /path/to/php generate.php TestArchives
    
  2. 以下2つのファイルが生成されたことを確認します。
  3. TestArchivesActionクラスのexecuteメソッドに必要な処理を記述します。パラメータは以下の3つです。
  4. URLとして渡されたパラメータはクラス変数、$_paramsに格納されています。
    $date = $this->_params[0];
  5. リクエストパラメータを取得するためには以下のように記述します。 パラメータのサニタイズはNullバイト文字列の除去以外行っていません。必要に応じて処理してください。
    $name = $request->get('name');
  6. セッションを利用する場合は以下のように記述します。
    $session->set('foo', $foo);
    $foo = $session->get('foo');
    
  7. テンプレートに値を設定する場合は以下のように記述します。
    $view->assign('foo', $foo);
  8. 最終的にテンプレートを表示させる場合、以下のように記述します。
    $view->forward();
  9. 条件によって表示させるテンプレートを変更したい場合、例えば TestArchivesError.tpl を表示する場合は以下のように記述します。
    $view->forward('error');

動作概要

  1. /foo.htmlにアクセスがあった場合、mod_rewriteによって/dispatcher.php?/fooにリクエスト内容が書き換えられる。
  2. dispatcher.phpはMoony_Config.phpをincludeして、動作に必要な設定を行う。
  3. dispatcher.phpはMoony_ErrorHandlerのインスタンスを生成、registerメソッドを呼び出して、エラーハンドラの設定を行う。
    • エラーが発生した場合、Moony_Loggerを用いてロギング処理が行われる。その後、httpのステータスで500(Internal Server Error)を返す。
  4. dispatcher.phpはMoony_Controllerのインスタンスを生成、ストリング(/foo)を受け渡す。
  5. Moony_Controllerは渡されたクエリーストリングを解析、アクション名称を決定する。
    • /fooの場合、アクション名称はFoo
    • /foo/barの場合、アクション名称はFooBar
  6. Moony_ControllerはMoony_Requestのインスタンスを生成、リクエストパラメータを格納する。
  7. Moony_ControllerはMoony_Sessionのインスタンスを生成、セッションを開始する。
  8. Moony_ControllerはMoony_Viewのインスタンスを生成、アクション名称を受け渡す。
    • Moony_Viewの内部ではSmartyのインスタンスが生成される。
  9. Moony_Controllerはアクション名称に従ってアクションサブクラス。
    • アクション名称がFooの場合、FooAction.phpというファイルをincludeして、インスタンスを生成しようとする。
  10. アクションクラスのファイルが引数なしで呼び出して処理を終了する。
    • 無条件にFoo.tplという名称のテンプレートファイルを表示する。
    • テンプレートファイルが存在しない場合は、httpのステータスで404(Not Found)を返す。
  11. アクションクラスのインスタンス生成に成功した場合、アクションクラスのexecuteメソッドを呼び出す。 引数として、先ほど生成したMoony_Request、Moony_Session、Moony_Viewのインスタンスをそれぞれ受け渡す。 また、クエリーストリングで渡されたパラメータをアクションクラスのメンバー変数、$_paramsにセットする。
  12. アクションクラス、またはそこから呼び出されたロジックの処理を行う。
  13. Moony_Viewのassignメソッドを用いて、テンプレートに必要な値をそれぞれ設定する。
  14. 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を参照してください。