ソースコードから理解する技術-UnderSourceCode

手を動かす(プログラムを組む)ことで技術を理解するブログ

Play framework(5) - 任意のコントローラ クラスの作成

Play frameworkのプロジェクトを作成すると、コントローラとしてApplicationクラスが作成されます。
このクラス内に全てのコントローラを定義してもいいのですが
仕事でアプリを開発する際には、恐らく複数のコントローラクラスを作成するでしょう。

ここでは、コントローラとして任意のクラスを作成する手順を記述します。

◆コントローラの作成
今回はコントローラとして「MemoController」クラスを作成します。
アプリのルート\app\controllersフォルダ内にMemoController.javaを作成し
以下のソースを書きます。

..\app\controllers\MemoController.java


package controllers;

import play.*;
import play.mvc.*;
import play.Play.*;
import play.data.validation.*;

import java.util.*;

import models.*;

@With(Secure.class)
public class MemoController extends Controller {

public static void create(){
setCreateRenderArgs();
render();
}

private static void setCreateRenderArgs(){
renderArgs.put("pageTitle", "Create");
}
}


create()はアクションなので、publicで定義します。
別メソッドを呼び出して「pageTitle」に「Create」という値を設定し、render()で画面を呼び出しています。
render()で画面のパスを指定しない場合、アクション名と同名の.htmlファイルがクライアントに返されます。

◆URLの指定
アクションを呼び出すためのURLは、デフォルトではコントローラのクラス名\アクション名 となります。
ですがURLをアプリのファイル構成とは異なる形式にしたいことも多いでしょう。

Play frameworkではURLと、対応するアクションの定義を「routes」ファイルに記述します。
このファイルは定義ファイルであるため、アプリのルート\confフォルダ内に存在します。

..\conf\routes


# Home page
GET / Application.index

(中略)

# Another pages
GET /create MemoController.create


一番上の定義はデフォルトで存在するもので、アプリケーションのルートURLに対応するアクションが
index()であることを定義しています。

一番下の定義が、今回追加したものです。
http://localhost:9000/create のURLに対応するアクションが、MemoControllerクラスのcreate()
であることを定義しています。

◆呼び出し元のビュー
createアクションの呼び出し元です。
f:id:UnderSourceCode:20130504101658j:plain
[Create]のリンクをクリックすると、create()アクションを呼び出します。
以下が[Create]リンクのソースです。

..\app\views\Application\index.html


#{extends 'main.html' /}
#{set title:'Home' /}

[<a href="@{MemoController.create()}">Create</a>]
<br/>
<br/>


[<a href="@{MemoController.create()}">Create</a>]で
リンクが呼び出すアクションとして、MemoControllerクラスのcreate()を指定しています。

このソースと、先のroutesファイル内でのURL指定によって、
リンクのURLとしてhttp://localhost:9000/create が自動的に生成されます。

◆createビューのパス
最後にcreate()アクション内で画面に返す、create.htmlについてです。
Play frameworkではビューのパスは、コントローラのクラス名のフォルダ\アクション名のファイル.html
という形式となります。

今回はMemoControllerクラス.create()アクションであるため
createビューは アプリのルート\app\views\MemoControllerフォルダ内に
create.html というファイル名で作成します。