Flash ActionScript2.0@Wiki

mojavi導入2

最終更新:

匿名ユーザー

- view
管理者のみ編集可


mojaviの導入(その2)


mojaviを使ったフレームワークの概念


右下のがクライアントからのアクセス。

クライアントがmojaviにアクセスしてくると、mojaviは「action」をおこします(①の部分)。
actionを実行すると、次にviewに移ります(②の部分)
viewではクライアントに返すHTMLをテンプレートから読み込みます。(③、④の部分)

以上がmojaviを使った一連の流れです。


mojaviを使う

WEBプログラマはまず何をするかというと、図で言うところの「①」の処理を考えます。
クライアントからのリクエストは「http://127.0.0.1/mojavi_tutorial/www/index.php?module=Default&action=hello」というようなURLでリクエストされます。またその時、GETなどのデータが付随することになります。
このリクエストでは、mojaviに「default」モジュールに「hello」というアクションを発生させるリクエストです。

一応、「Default」というモジュールは最初から存在します。
しかし、helloというアクションをどのように処理するかはプログラマが決定しなければなりません。

では、helloというアクションを受け取ったら「Hello!」という文字をクライアントに返す様なプログラムを作ってみましょう。

「hello」というアクションの処理

「/webapp/modules/Default/actions」に「helloAction.class.php」というファイルを作ってください。(文字コードはEUC)
そのファイルの内容を以下のように入力します。

<?php

class helloAction extends Action
{

    function execute (&$controller, &$request, &$user)
    {
		$request->setAttribute('message','Hello!');
		return 'success';
	}
}	

?>

クライアントから「hello」アクションを受け取るとexecute関数がmojaviから呼び出されます。helloアクションを受け取ったときにやりたいことをここに書き込めばいいのです。
今回はなにやら難しい事がexecute関数内に書いてありますが、そのまま入力してください。

「hello」アクションのに対するviewの処理

action処理が終了すると(上のexecute関数が実行された後)mojaviはviewを呼び出します。

「/mojavi_tutorial/modules/Default/views」に「helloView_success.class.php」というファイルを作ってください。
「hello」action処理が終わると「hello」view処理が始まるわけです。その内容を「helloView_success.class.php」に書き込みます。

<?php
class helloView extends View
{

    function & execute (&$controller, &$request, &$user)
    {
        $renderer =& new Renderer($controller, $request, $user);

        $renderer->setTemplate('defaultindex.tpl');
        $renderer->setAttribute('view_message', 
                 $request->getAttribute('message'));

        return $renderer;
    }
}

?>

Rendererというクラスは、Smartyなどと同じくテンプレートクラスです。つまりこの例でいうなら、「defaultindex.tpl」というファイルの一部を置き換える必要があれば置き換え、その結果をクライアントに返すというクラスです。
この場合、defaultindex.tplというファイル内に「view_message」という変数が合った場合、action処理でmessageにセットいした内容を置き換えるという意味になります。

では、defaultindex.tplというファイルの中身はどうなっているのかというと......

このチュートリアルではまだ作成していないので作成しなければなりませんね。


テンプレートの作成「defaultindex.tpl」

「/webapp/modules/Default/templates」に「defaultindex.tpl」というファイルを作成します。(もちろん、文字コードをEUCで)

<div><?= $template['view_message'] ?></div>

のように書き込み保存してください。

実行

では、早速アクセスしてみることにしましょう。


(ドキュメントルートにある「www」の中にある「index.php」を実行します。その時、上記のURLのようにGETパラメータをつけます)

ブラウザに「Hello!」と表示されましたか?

少し発展

表示するメッセージを変えてみます。

「helloAction.class.php」
$request->setAttribute('message','Hello!'); // ←ここを変える

$request->setAttribute('message','Hello!World!');と変えてみた。

アクセスすると、ブラウザに「Hello!World!」となるはずです。

次回

コレを見ている殆どのWEBプログラマはなんでactionとviewの二つに分けるんだ?めんどくさくてしょうがないと思うかもしれません。

たしかに、フレームワークを無視してaction処理時に「print」などでブラウザに表示する文字を出力した方が直感的かもしれません。

が、フレームワークの趣旨がロジックとデザインの分業なわけで。
ロジック部はすべてaction処理に任せます。例えば、ファイルから文字列を読み取るなどの処理はaction処理で行います。
読み取ったデータなどは「setAttribute関数」を使ってviewに渡します。
view処理では「getAttribute関数」でファイルから読み取ったデータをどのように表示するかを決めます。

一人の人間が両方やると、なんだか馬鹿らしいですが複数の役割分担でプログラムする場合は、分業ができるので便利かもしれません。

次回はクライアントからデータを受け取ります。双方向処理を行います。
添付ファイル
記事メニュー
目安箱バナー