CRUDモジュール
Rails のように Play においても一般的な CRUD 処理を簡単に組み込むことができる。CRUD モジュールを組み込むために /conf/application.conf にてモジュールを有効にする。
# Additional modules # ・・・ module.crud=${play.path}/modules/crud
/conf/routes にadminのパスでCRUDモジュールが有効になるよう設定。
# Import CRUD routes * /admin module:crud
application.conf へ設定変更したので、Webサーバを一旦停止。eclipse で利用している場合には、モジュールをビルドパスに追加するため、再度 eclipsify、その後テストモードでWebサーバ起動しておく。
play eclipsify yabe play test yabe
CRUD コントローラの作成
/app/controllers/Posts.java として以下を作成。
package controllers; import play.*; import play.mvc.*; public class Posts extends CRUD { }
同様に /app/controllers/Users.java を作成。
package controllers; import play.*; import play.mvc.*; public class Users extends CRUD { }
同様に /app/controllers/Comments.java を作成。
package controllers; import play.*; import play.mvc.*; public class Comments extends CRUD { }
http://localhost:9000/admin/ としてアクセスすると、各エンティティに対するCRUD処理が可能になる。
バリデーションの追加
app/models/User.java にアノテーションを加えることでバリデーションを有効とする。
package models; import java.util.*; import javax.persistence.*; import play.db.jpa.*; import play.data.validation.*; @Entity public class User extends Model { @Email @Required public String email; @Required public String password; ・・・
app/models/Post.java についても同様。
package models; import java.util.*; import javax.persistence.*; import play.db.jpa.*; import play.data.validation.*; @Entity public class Post extends Model { @Required public String title; @Required public Date postedAt; @Lob @Required @MaxSize(10000) public String content; @Required @ManyToOne public User author; @OneToMany(mappedBy="post", cascade=CascadeType.ALL) public List<Comment> comments = new ArrayList<Comment>(); ・・・
app/models/Comment.java についても同様に。
package models; import java.util.*; import javax.persistence.*; import play.db.jpa.*; import play.data.validation.*; @Entity public class Comment extends Model { @Required public String author; @Required public Date postedAt; @Lob @Required @MaxSize(10000) public String content; @Required @ManyToOne public Post post; ・・・
ラベルの変更(国際化)
CDRU モジュールではEntity名がそのままラベルとして表示されるので、これをカスタマイズする。conf/application.conf の i18n の項目で lang の定義を ja とする。反映はwebサーバの再起動が必要。
# i18n application.langs=ja
conf/messages
title=Title content=Content postedAt=Posted at author=Author post=Related post name=Common name email=Email password=Password fullname=Full name isAdmin=User is admin
conf/messages.ja
title=タイトル email=メール password=パスワード fullname=氏名 isAdmin=管理者