!続・Playで遊んでみる 今日は,[Play 2.xのScala Templatesでビュー&フォーム操作|http://www.atmarkit.co.jp/ait/articles/1305/21/news076.html]から. ::Template テンプレートからテンプレートもよべる,ということらしい. も少し慣れが必要そうだなあ... ::ユーザ入力フォームを作ってみる modelsに追加したUserクラスがにageがあるのにサンプルではageの分がなくて apply/unapplyがエラーになったので,"age"を追加してみた"-> text"じゃだめだったので, "-> number"にしてみたけど,これって何だろう... object UserController extends Controller{ val userForm = Form( mapping("name" -> text, "email" -> text, "age" -> number) (User.apply) (User.unapply) ); def entryInit = Action { val filledForm = userForm.fill(User("user name", "email address", 0)) Ok(views.html.user.entry(filledForm)) } def entrySubmit = Action { implicit request => val user = userForm.bindFromRequest.get println(user) Ok(views.html.user.entrySubmit()) } } entry.scala.htmlも
のように変更. ::バリデート バリデート処理がかけるらしい.numberもバリデートなのだな. Formsのところにバリデートはのってる http://www.playframework.com/documentation/2.2.3/api/scala/index.html#play.api.data.Forms$ numberには最大値/最小値も指定できるようだ. val userForm = Form( mapping("name" -> nonEmptyText, "email" -> email, "age" -> number(min=10, max=90)) (User.apply) (User.unapply) ); としてみた. def entryInit = Action { val filledForm = userForm.fill(User("user name", "email address", 30)) Ok(views.html.user.entry(filledForm)) } デフォルト値のまま送信すると"email address"がメールアドレスとして不適切なのでエラーになって デバッグ的な表示が. アプリとしては,エラー処理が必要だよね. と,思ったら直後にエラー処理の書き方が説明してあった. def entrySubmit = Action { implicit request => userForm.bindFromRequest.fold( errors => { println("error!") BadRequest(views.html.user.entry(errors)) }, success => { println("entry success!") Ok(views.html.user.entrySubmit()) }) } ::次は,データベースとの連携...らしいので,まずMySQLをインストール ちなみに,なぜか xcodebuild が実行できないとかいうので,xcodebuild を単独で実行してみると xcode-select: error: tool 'xcodebuild' requires Xcode, \ but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance とエラーをはいていた.というわけで, sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer としてからMySQLをインストール. sudo port install mysql56 +openssl +system_readline sudo port install mysql56-server sudo /opt/local/lib/mysql56/bin/mysql_install_db --user _mysql sudo port load mysql56-server sudo port select mysql mysql56 ::MySQLでDBを用意 まずは,ユーザを作る. mysql -u root mysql でMySQLにアクセスして create user 'miyo'@'localhost' identified by PASSWORD で,まあ,ローカルのマシンだし,ということで... grant all on *.* to 'miyo'@'localhost'; とか. show grants for miyo@localhost; で確認.MySQLから切断して, mysql -u miyo -p で作成したmiyoでログイン. create database play_test; でデータベース作った. show databases; で,作ったデータベースを確認. ::PlayにMySQLの設定をする conf/application.confのdatabase関連のパラメタを設定 db.default.driver=com.mysql.jdbc.Driver db.default.url="jdbc:mysql://localhost/play_test" db.default.user=miyo db.default.password=miyo db.default.logStatements=true projects/Build.scalaを設定...とあるけど,build.sbtに置き換えられたらしい. mysqlを追加 libraryDependencies ++= Seq( "mysql" % "mysql-connector-java" % "5.1.30", jdbc, anorm, cache ) playコンソールで reload update とする.playコンソールで run としてWebブラウザから http://localhost:9000/sample1 にアクセスすると, DBにアクセスできないというエラーが. MySQLのskip-networkが有効になっているのが問題なようなので, /opt/local/etc/mysql56/macports-default.cnfのskip-networkをコメントアウト. sudo port unload mysql56-server sudo port load mysql56-server として,アクセスできた.よかった,よかった. !メモ いつか使うかも - [高クオリティ!商用利用OKのアイコン、イラスト無料(フリー)素材まとめ|http://liskul.com/highquality-iconillust-free-2240]