トップ 一覧 Farm 検索 ヘルプ RSS ログイン

Diary/2019-9-2の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!PlayFrameworkメモ
何度目かのPlayFramework入門.とりあえずsbtを用意した状態からスタート.

::プロジェクト作成
 sbt new playframework/play-scala-seed.g8
プロジェクト名は適当に決める.
プロジェクト名と同名のディレクトリが作られるので,そこに移動.

::HelloWorldする
conf/routes にURLと,そのURLにアクセスしたときに実行したいメソッドの対応を書く.
たとえば,
 GET     /my-hello                   controllers.MyHello.hello
とか書く.
で,メソッドを用意.クラスはappの下に用意.今回は app/controllers/MyHello.scala.
中身は,
 package controllers
 
 import javax.inject._
 import play.api.mvc._
 
 import play.api.data._
 import play.api.data.Forms._
 
 class MyHello @Inject()(mcc: MessagesControllerComponents)
     extends MessagesAbstractController(mcc){
 
    def hello() = Action { implicit request : MessagesRequest[AnyContent] =>
      Ok(views.html.myhello("My Hello World", "miyo"))
    }
 }
とか.ここで,views.html.myhelloは,app/views/myhello.scala.html に 定義する.
中身は,
 @(mesg1: String, mesg2: String)
 <html>
 <head><title>MyHello</title></head>
 <body>
 @mesg1 from @mesg2 <br>
 <ul>
 <li>mesg1.lenth = @mesg1.length</li>
 <li>mesg2.lenth = @mesg2.length</li>
 <li>mesg1.length + mesg2.length = @(mesg1.length + mesg2.length)</li>
 </ul>
 </body>
 </html>
とか.HTMLにScalaを埋め込んだもの.
必要があれば,@import で,Scalaのimport文が書ける.
@()の中で定義した変数がScalaから引き渡されて,html中で使用できる.
 <li>mesg1.length + mesg2.length = @(mesg1.length + mesg2.length)</li>
は,
 <li>mesg1.length + mesg2.length = @(@mesg1.length + @mesg2.length)</li>

 <li>mesg1.length + mesg2.length = @mesg1.length + @mesg2.length</li>
ではないので注意.

::実行する
 sbt run
で実行して,ブラウザで
 http://localhost:9000/my-hello
にアクセス.エラーがでたら適宜修正.
ブラウザでリロードすると裏でコンパイルプロセスが走って,再実行される.

::本来の開発の順番は
逆がよい.
ビューとアクションを用意してからrouteを書くみたい.あたり前か.