cobonas

2014.06.04

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

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

最近、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を使った入力チェックも簡単にできるので、是非利用していきましょう。