Allied ArchitectsAllied ArchitectsEngineer Blog

Play Framework(Play2)(Scala)のTips Part1:フォームのマッピングあれこれ

2014/06/4 Scala

お久しぶりです。伊藤(係長)です。

最近、PHPでの開発を一旦休業しまして、ScalaでPlayFramework(Play2)を
使ったWebアプリの開発を始めました。
というわけで今後は主にPlay2とかScalaとかの記事を書いていこうと思います。

最初は初級編という事で、ControllerとViewとを橋渡しする
Formのマッピングについて書きたいと思います。
調べればController側の実装はそれなりに出てくるのですが、
じゃあView側はどう書くの?とか思った経験があったので
その辺も考慮して実際に動くソースをだらだら挙げていきます。

1. Stringをマッピングする
■Controller

■View

※まだmapping関数は登場しません。

2. Tupleをマッピングする
■Controller

■View

※まだmapping関数は登場しません。。

3. caseクラスをマッピングする(シンプル)
■Controller

■View

※やっとmapping関数が登場しました。この中でcaseクラスとFormのマッピングを定義します。

4. caseクラスをマッピングする(ネスト)
■Controller

■View

だんだんと複雑になってきましたね。ネストしている場合はmapping関数を
ネストして記述すればOKです。
それに合わせてView側も”profile.year”のようにピリオド区切りで指定します。

5. caseクラスをマッピングする(ネスト&Tupleネスト)
■Controller

■View

ここまで来るともう良くわからなくなってきましたね。
今まではProfileをマッピングする際にapply、unapply関数で済んでましたが、
すんなりcaseクラスとマッピングできない場合は、自前の関数を書く必要があります。

6. caseクラスをマッピングする(Seqあり)
若干トーンダウンしますが、Formに対応するView側の書き方がわかりづらかったので。
■Controller

■View

FormのField指定を”families[0].relationship”のように指定すれば良いみたいです。
ちなみに”families[].relationship”のようにインデックスなしで指定すると
うまく動いてくれません。。。

これで基本的な書き方は押さえられたと思います。
さらに複雑なマッピングをしなければならない場合は、組み合わせて書けばなんとかなると思います。

今回はマッピング型としてtextとnumberしか使用していませんが、他にも
nonEmptyTextとかlongNumberとかoptionalとかもあります。
また、verifyingを使った入力チェックも簡単にできるので、是非利用していきましょう。

  • cobonas
  • プログラマ
  • 元Javaプログラマ。現在はScala/PlayでWeb開発と、SwiftでiOSアプリ開発をしています。 Unitテストとか書いてる時が一番楽しかったりします。

RELATION ENTRY

Play Framework(Play2)(Scala)のTips Part3:Akkaを使った非同期/バッチ処理(Advent Calendar 20日目)

Play Framework(Play2...

2014/12/20 Scala

この記事はアライドアーキテクツAdvent Calendar 20日目の記事です。 どうも。伊藤(係長)です。 今日は他の方に乗っ取られる事もなく無事に書くことができます。 今回はAkkaを使った非同期処理やバッチ処理についてです。 通常、非同期処理をJavaとかで書こうと思ったら、ちょっとメン...

続きを読む

Play Framework(Play2)(Scala)のTips Part2:Specs2とMockitoでテストを書く(Advent Calendar 8日目)

Play Framework(Play2...

2014/12/8 Scala

この記事はアライドアーキテクツAdvent Calendar 8日目の記事です。 どうも。謎の刺客Tarou Yamadaさんにカレンダーを乗っ取られてしまった伊藤(係長)です。 気を取り直して、今回はSpecs2とMockitoを使ったユニットテストのお話を書きます。 ■Specs2とは ...

続きを読む

cobonasの記事一覧へ

ページTOPへ