読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Play Frameworkでroutesをいじって特定のメソッドの返り値をブラウザに表示させてみる。

<スポンサーリンク>

Play FrameworkのMVC

「Model」、「View」、「Controller」の組み合わせとしてアプリケーションを構築しようという理論。
Modelとは、データの管理を行うもの。また、DBへのアクセスやビジネスロジック、データの処理などを請け負う。

Controller

Controllerは、アプリケーション全体をコントロール(制御)するもの。
app\controllers\の下に、コントローラを担うコードが配置されるようになっている。
Controllerクラスには、クライアントからのアクセスに応じて実行されるメソッドが用意される。
なお、以下のように、すべてのControllerはControllerクラスを継承して作成される。

package controllers;

import play.*;
import play.mvc.*;

import views.html.*;

public class Application extends Controller {

	//indexメソッドはアプリケーションのルート(/)にアクセスした時に呼び出される
    public static Result index() {
    	//okメソッドはResultインスタンスを返す
        return ok(index.render("Your new application is ready."));
    }

}

ここのメソッドはroutesファイルと密接に関係している。
それについては後で説明する。

View

Viewとは、その名の通り、画面の表示に関する部分を受け持つ。
「app\views」の下にViewにまつわるファイルが置かれる。

デフォルトである
・main.scala.htmlはページ全体のレイアウトとなるもの
・index.scala.htmlはindexのActionで表示されるコンテンツである。

index.scala.htmlが以下のようになっているとする。
ここの@msgはcontrollerから返ってきた値を入れるものである。

@(msg: String)

@main("Sample Page") {

	<h1>Hello!</h1>
	<p>@msg</p>

}

で、コントローラから返ってくる値というのが、

    public static Result index() {
    	//okメソッドはResultインスタンスを返す
        return ok(index.render("Your new application is ready."));
    }

の部分である。

実際に色々試す前に、routesとcontrollerの関係について考える。

routes

conf/routesファイルには以下の様な記述がある。

GET     /                           controllers.Application.index()

これは、

HTTPメソッド  アドレス  呼び出すメソッド

の意味がある。

ここに

GET    /myget                     controllers.Application.myGet()

というのを追加する。
これは、

http://localhost:9000/myget

というGETリクエストに、
controllers.ApplicationクラスのmyGet()メソッドが対応している。

だから、
controllers.Applicationクラスに

    public static Result myGet() {
    	return ok(index.render("myGet"));
    }

と追記して、

http://localhost:9000/myget

にリクエストを投げれば、
ブラウザには

Hello!

myGet

と表示される。
このmyGetというのは、コントローラ側から
index.scala.htmlの@msgに渡された文字列オブジェクトである。

参考

参考にしましたが、サンプル通り書いても動きません
掌田さんの著書は、HTML5の本も買いましたが、こちらもサンプル通りに書いても動きませんでした。

この本に限れば、p.34のサンプルのとじカッコ(})が抜けていたり、if文がおかしくなっていたりしているので、2版では直した方がいいと思います。。
今後も随時、おかしなところを見つけたらお知らせします。