2012年12月13日木曜日

Play! ~チュートリアルをやってみた中編

前回に引き続きPlay!チュートリアル.
ついにコードをいじり始める


Playちゅーとりある後編


0. 準備いろいろ

とりあえず前回の3. でサーバが run している状態から続き.
run していなければとりあえず run.
そしてもうひとつ必要なことが, MVCモデルの理解.
理解といっても詳細に説明できるほど, なんてことはなく, 
「まぁ役割に応じてそれぞれ管理するところを分けてんだへぇー('A`)」
くらいの認識があれば十分.(なはず(・ω・`)大丈夫かな)
詳しくはグーグル先生あたりに聞くといろいろ教えてくれるはず.
まぁMVCが
「M(モデル), V(ビュー), C(コントローラ)」
を表現してることだけ知ってれば自分はどうにかなってる('A`)たぶん

1. アクションとコントローラ

まずはアクションとそれをまとめるコントローラのお話らしい. もう少し構造について話してからでも遅くない気がするんだけどなぁ…(・д・`)
conf/routesファイルをテキストエディタあたりで開くとチュートリアルにあるような文が見られるはず.
GET /       controllers.Application.index()
いきなりなんじゃいorz特に右のお前.
これだけだとらちが明かないのでapp/controllers/Application.javaも隣に開いてみる.
すると中にはjavaコード. よく見てみるとなにやらメソッドが入ってる.
  public static Result index() {
    return ok(index.render("Your new application is ready."));
  }
このindex(), これがちょうど先ほどroutesファイルに入ってた右のあいつにあたる.
なのでApplication.javaではなく, Hoge.javaのindex()を呼びたいなら,
GET /       controllers.Hoge.index()
になるはず.
そして左はリクエストの情報. なのでチュートリアルのほうで和訳すると,
「GETメソッドで localhost:9000 でアクセスしてきた時, controller.Application.javaのindex()を呼び出すよ!(・∀・)」
という設定を書いてることになる.

そしてApplication.index(), こちらが返すResult型がresponseとして扱われる, との事.
return しているものも簡単に和訳すると,
「index に"Your new application is ready."というStringを与えて, ステータス200 OK で返すよヽ(・ω・)/」
って事らしい, ok の部分を badrequest などに変えるとステータスを変えてreturnできます, index.render()についてはもうちょっと後に出てきます.

簡単にまとめると,
 conf/routes -> リクエストに対するアクションの振り分けをします.
  app/controllers/ -> アクションを内包するコントローラクラスを入れます.
ってことらしい.
ちなみに今更だけど, ここではアクションとはindex()なんかのメソッドにあたります. たぶん(・з・)

2. ビュー

別にチュートリアルでは分かれて無いけど. だいぶ冗長なので.
こんどはapp/views/index.scala.htmlをテキストエディタで開いてみましょう. ファイル名気持ちわる('A`)
ちなみにこいつが1. ででてきた index.render() のindexにあたる.
なので main.render() にするとすぐしたの main.scala.html を指定することになる.
さてindex.scala.html の中身はというと…
@(message: String)

@main("Welcome to Play 2.0") {
    
    @play20.welcome(message)
    
}
これだけ.
これまた @ だらけで良くわからん.
少しずつ見ていくと, まず最初の
@(message: String)
いきなりわけがわからないが, なにやら変数の宣言にも見えなくは無いか.
しかしこれはどちらかというと引数の宣言に当たる.
すなわち, 1. のApplication.index() で与えられたString「"Your new application is ready."」はここで message に格納される.
ここで引き受けたら後は5行目のように, コード内で使えるようになる.
そして
@main("Welcome to Play 2.0") {
    
    @play20.welcome(message)
    
}
mainはちょうどmain.scala.htmlにあたる, 後ろの2つは引数. 
 @play20.welcome(message)
こいつは良くわからない('A`)が働きとしては message を引数にデフォルトのページのhtmlを返すメソッドとして働く.
ということは@main以下は,
「main.scala.htmlに, String型 と Html型 2つの引数を投げてここに貼るよ!(・з・)」といったところ.
なのでmain.scala.htmlも開いて確認してみる.
@(title: String)(content: Html)

<!DOCTYPE html>

<html>
    <head>
        <title>@title</title>
        <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
        <link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")">
        <script src="@routes.Assets.at("javascripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
    </head>
    <body>
        @content
    </body>
</html>

はい, 一番上にStringとhtmlを受け取る準備ができていました.

これが大体の流れ. チュートリアルの内容にだいぶいろいろ足したけど('A`)
おかげで終わらなかったorz

続きはまた次回にでも.







次で…終わらない気がするーヽ(;´Д`)ノ

0 件のコメント:

コメントを投稿

AWS CDKで立てたEC2インスタンスのTimeZoneとかいじりたかった話

EC2を立てることはできたけど、立てたインスタンスは UTCのままだし設定ファイルとかいちいちscpしてくるのはダルい。 当初UserDataでなんとかしようとしたものの、「書く量がヤバいしメンテしにくい」と悩んでいたところ見かけたのが  AWS::CloudFormation:...