|
|
|
|
app: アプリケーションのソースファイル conf: 設定、ルーティング、カタログ、等のファイル置き場 lib: サードパーティーのjarファイル置き場 (自動的にclasspathに追加される) public: js,css,imageなどの静的ファイル置き場 test: テストファイル置き場 (JUnit or Selenium) |
| コマンド | 形式 | 補足 |
|---|---|---|
| play run | foreground | |
| play start | background | |
| play test | foreground | env=test |
デフォルトは 9000 ポートなので、以下にアクセスして確認できる。
ポートの設定は conf/application.conf の "http.port" で指定可能。
rails と違って、play ではコントローラはインスタンス化されない。アクションは全て static なクラスメソッドとして定義する。
static void index() { ... } |
これは java 用の定義で、scala では単にメソッド定義するだけでよい
def index { ... } |
アクションは return 構文を持たない。メソッドは render などの result メソッドが呼ばれた時点で終了する。(それが自然な気がする。何だったんだ DoubleRenderError)
params メソッドでパラメータオブジェクトを取得可能。
| クラス | Scope.Params |
| 定義 | mvc/Scope.java |
public String get(String key) {
public void put(String key, Object value) { |
クエリパラメータ(例えばid)は、
params.get("id") |
で取得できる。さらに、merbのようにアクションメソッドの引数に記述することもできる。つまり、
def show() {
val id = params.get("id") |
ではなく、
def show(id: String) { |
と直接引数で受けることができる。(この意味で、rails より merb に似ている)。引数の順序は関係ない。このアクションメソッドの引数を、playでは「(アクションメソッドの)シグネチャ」と呼ぶ。
さらに、シグネチャの値は、変数の定義型によって(可能な限り)自動的にキャストされる。
int, long, boolean, char, byte, float, double, Integer, Long, Boolean, Char, String, Float, Double.
(以上は java の型。scala の場合は似たようなクラスで)
/hello/show?date=05-05-2010 |
というアクセスがあった場合、
def show(date: Int) {
date // => 0 // 変換失敗による Int のデフォルト値
def show(date: Date) {
date // => Wed May 05 00:00:00 JST 2010 |
となる。これは便利。
flash.error("Oops, plase enter your name!") |
Groovy テンプレートエンジンを利用。(ちょっと遅そう)。JSPタグライブラリに似た、独自の「playタグ」という形式で記述する。
#{ xxx /} |
| #{extends 'foo.html' /} | rails の部分テンプレートと同じ |
| #{doLayout /} | rails の yield と同じ(親テンプレートで利用する) |
テンプレート内では任意の式を実行させることはできない。これは、Groovy テンプレートエンジンの制約によるもの。式は評価できないが、テンプレート処理の前に設定したデータを動的に埋め込むことは可能。埋め込みデータの形式は Map(String->Object) な連想配列で、これをGroovyではBindingと呼んでいる。play では render メソッドの引数に Binding を渡すことができる。
controller
|
template
|
<h1>Hello ${myName ?: 'guest'}!</h1> |
'?:' は groovy で使われているデフォルト値を指定する演算子らしい。
Rails の url_for 的な url 名の解決には、"@{ ... }" を利用し、その中でコントローラクラスとアクションを指定する。
<a href="@{Application.index}">Top page</a> |
#{if flash.error}
<p style="color:#c00">
${flash.error}
</p>
#{/if} |
以下、親の敵のように調査中。
| JRuby | Rails | Berryz | ℃-ute | エッグ | jQuery |
| 前 | 2010年 5月 |
次 | ||||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 | |||||