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を書くみたい.あたり前か.