Flash ActionScript2.0@Wiki
mojavi導入2
最終更新:
匿名ユーザー
-
view
mojaviの導入(その2)
mojaviを使ったフレームワークの概念
右下のがクライアントからのアクセス。
クライアントがmojaviにアクセスしてくると、mojaviは「action」をおこします(①の部分)。
actionを実行すると、次にviewに移ります(②の部分)
viewではクライアントに返すHTMLをテンプレートから読み込みます。(③、④の部分)
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」というアクションを発生させるリクエストです。
クライアントからのリクエストは「http://127.0.0.1/mojavi_tutorial/www/index.php?module=Default&action=hello」というようなURLでリクエストされます。またその時、GETなどのデータが付随することになります。
このリクエストでは、mojaviに「default」モジュールに「hello」というアクションを発生させるリクエストです。
一応、「Default」というモジュールは最初から存在します。
しかし、helloというアクションをどのように処理するかはプログラマが決定しなければなりません。
しかし、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関数内に書いてありますが、そのまま入力してください。
今回はなにやら難しい事がexecute関数内に書いてありますが、そのまま入力してください。
「hello」アクションのに対するviewの処理
action処理が終了すると(上のexecute関数が実行された後)mojaviはviewを呼び出します。
「/mojavi_tutorial/modules/Default/views」に「helloView_success.class.php」というファイルを作ってください。
「hello」action処理が終わると「hello」view処理が始まるわけです。その内容を「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というファイル内に「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関数」でファイルから読み取ったデータをどのように表示するかを決めます。
ロジック部はすべてaction処理に任せます。例えば、ファイルから文字列を読み取るなどの処理はaction処理で行います。
読み取ったデータなどは「setAttribute関数」を使ってviewに渡します。
view処理では「getAttribute関数」でファイルから読み取ったデータをどのように表示するかを決めます。
一人の人間が両方やると、なんだか馬鹿らしいですが複数の役割分担でプログラムする場合は、分業ができるので便利かもしれません。
次回はクライアントからデータを受け取ります。双方向処理を行います。
添付ファイル