TOP書籍連動> モジュールの作成
フレームワークの役割とその構築
フレームワークの役割とその構築

第5回:モジュールの作成

著者:Darryl Patterson   2006/8/21
前のページ  1  2
モジュールの作成

   フレームワークの最もよいところは、どう動作しているかわからなくても使えるところです。この考え方は特に「どう動くか」を詳しく掘り下げていくのが好きなPHP 開発者にはいやがられます。しかし重要なのは、クラスが何をしているのか、どう使うのかを理解することです。

   リスト10は、Loginモジュールがどのようなものかを示しています。EdLecky-Thompsonが書いたセッションハンドラを使用していることに注意してください。
リスト10
<?php
⁄**
 * 
 *
 *
 * @author Darryl Patterson <darryl.patterson@eurorscg.com>
 * @copyright Euro RSCG 4D
 *
 *⁄


class Module_Login extends Module {

    function Module_Login()
    {
        parent::Module('Login');
        $this->defaultAction = 'login';
    }

    function getHandledRequest()
    {
        $html = '';

        switch (HTTPRequest::getAction()){
            case 'process':
                $html = $this->login_process();
                break;
            case 'logout':
                $html = $this->logout();
                break;
            default:
                $html = $this->login();
        }

        return $this->getTemplate();
    }

    function login_process()
    {

if ($this->env->session->login(
  HTTPRequest::getParameter('username',),
  HTTPRequest::getParameter('password'))){
    HTTPRequest::redirect(
      $this->env->session->getValue(
        'loginRedirect'));
            return;
        } else {
            $this->loadTemplate('loginError');
        }
    }


    function login()
    {
    }

    function logout()
    {
        $this->env->session->logout();
        $this->env->session->setValue('loginRedirect', '');
        HTTPRequest::redirect('Default');
    }


}
?>

   リスト11は、Login アクション用のアクションテンプレートを示しています。単純なHTML ドキュメントの一部です。ディレクトリツリー内では次の場所になります。/include/tpl/Login/login.tpl

リスト11
<form action="/app/Login/process" method="post">
    <table border="0">
        <tr>
            <td>{LANG_username}:</td>
            <td><input type="text" name="username" /></td>
        </tr>
        <tr>
            <td>{LANG_password}:</td>
            <td><input type="text" name="password" /></td>
        </tr>
        <tr>
            <td> </td>
            <td><input type="submit" value="{LANG_submit}" /></td>
        </tr>
    </table>
</form

   リスト12には言語ファイルが示してあります。ディレクトリツリーでは次の場所になります。/include/lang/Login/en.txt

リスト12
username = Username
password = Password
submit   = Login

   このサンプルモジュールで最も重要なのは、getHandledRequest()関数をどうやってオーバーライドしているかというところです。Moduleスーパークラス(リスト6)を見ると、getHandledRequest()関数はただ定義されているだけ(ブロック内にコードがない)であることがわかるでしょう。

   PHP5ならこの関数は抽象関数となり、必ずモジュール内で実装するよう開発者に強制することができます。開発者が作るのは、モジュールのアクションの処理だけです。実装には様々な方法がありますが、ここでのコード標準ではswitch/case文を使うことになっています。

   アクションをチェックし、アクションとして普通は同じ名前の関数を呼び出します。Webブラウザが/app/Login/login にリクエストを送ってきた時は、フレームワークはLoginモジュールを読み込み、さらにその中でlogin.tpl という名前のテンプレートが読み込まれます。それからモジュールはlogin()関数を呼び出しますが、それは何もしません。モジュールのgetHandledRequest()関数が最終行でテンプレートをHTMLの一部として返し、それをハンドラが受け取ります。

   Webブラウザがログインフォームをサブミットすると、リクエストはユーザ名とパスワードをPOSTデータとして持つ/app/Login/processとなります。この場合、フレームワークは再度Loginモジュールを読み込みますが、今度はprocess.tplというアクションテンプレートを読み込みます。見つからなければ何も読み込まれません。

   次にモジュールはlogin_process()メソッドを呼び出し、ログイン処理を行います。ログインに成功すると、ホームページにリダイレクトされます。失敗すると、loginError.tplファイルがアクションテンプレートとしてモジュール内で読み込まれます。

   これが全サイクルです。Loginクラスからわかるように、モジュールを作るのに特に制限はなく、モジュール1つだけで完結しています。

   HTMLの変更はモジュールのアクションテンプレートで行われ、言語ラベルはモジュールごとの言語ファイルで処理されます。フレームワークを使うとアプリケーションのデバッグが簡単になります。URLによってエラーがどこで起きているか正確にわかるので、アクションをたどっていくことができます。テキストが間違っている場合も、修正しなくてはいけない部分が簡単に分かります。

   HTMLに間違いがあれば、tplディレクトリを見ればいいのです。フレームワークではすべてがとても明確になります。


今後の機能追加予定

   筆者たちは最近ユーザパーミッション層を追加し、フォームの入力チェックをもっと簡単にする予定です。また、PHP5とMySQL5への移行も行いました。このようなアップグレードを簡単に行えるように、フレームワークの再コーディングに力を注いでいます。

   フレームワークが筆者たちのWebサイトと相性がよいかどうか確かめるには、まだ時間がかかります。しかしフレームワークの素晴らしいところは、フレームワークを使用して作ったサイトに影響を与えることなくこのような更新を行えるところです。

前のページ  1  2

PHPプログラマーズマガジン 書籍紹介
PHPプログラマーズマガジン

PHPプログラマーズマガジンは、PDF形式で読者の方にお届けするPHP言語(PHP: Hypertext Processor)専門誌です。 カナダMTA出版のphp|architect誌を日本語に翻訳し、独自の記事を加えて月刊でお届けしています。

発行:アシアル株式会社  価格:1,029円

 ご購入はこちら
http://www.phppro.jp/magazine/
Darryl Patterson
著者プロフィール
Darryl Patterson
1992年からWebプログラミングの仕事に従事している。彼はHTMLが使われはじめてから、その後Perl/CGI、Cold Fusion、ASPやPHPが使われるようになっていくWebの歴史とともに歩んできた。PHPでの開発は1998年から手がけており、今はトロントのEuro RSCG 4Dで開発チームのリーダー。また1995年からWebプログラミングをCentennial大学で教えており、そこでトロントのPHPユーザ会であるTorPUGを立ち上げた。


INDEX
第5回:モジュールの作成
  単純なデータアクセス層:データオブジェクト
モジュールの作成