これまでのあらすじ。
Skinny Frameworkの素振りをする(1スイング目)
Skinny Frameworkの素振りをする(2スイング目)
さて、引き続き何かしよう。
メッセージ定義
メッセージ定義はsrc/main/resources配下にあるmessage.confで定義可能。
ロケールごとにmessages_{locale}.confと言うかたちで定義する。
日本語であればmessages_ja.confとなる。
ちなみにDB設定はapplication.confに書いてある。
ところで、skinnyのi18nがnullしか取れないんだがどうやって設定するんだろう…と思って調べたらちゃんと載ってました。
http://skinny-framework.org/documentation/i18n.html
messages_ja.confを仕込んだ上で、 これに従い、ApplicationControllerでi18nの設定をjaにすると無事に日本語が表示されました!
カスタムクラスをモデルの型として利用したい
どうやらParamTypeというtraitでモデルの型定義をしているよう。
多分、こんな風につくってFormの生成をしている処理に仕込めば良い。
想定するデータのパターンマッチで弾く感じ。僕が作りたいのは3つの値しか持たないコンボボックスとかそういうための型。
case object CustomParamType extends AbstractParamType ({ case null => NONE // ココに処理を書いていく })
TypeConverterというのがあって、これも関係しているかもしれない。
たぶんここらへん。
Skinny-ORM
書いてあることに近いような遠いような。
あと、Entity側の型マッピングもやらないとダメなような気がする。
TimeStampのの実装を見るとTimestampsFeature[Entity]というふうになっている。
これを模倣してCustomのFeature作ってやればうまくいくかなぁ。
scaffoldで生成されたもののルーティング
scaffoldでCRUDが自動生成されるわけだけど、ルーティングはこんな感じにやってくれる。
hogehoge/{id}・・・詳細画面
hogehoge/new・・・新規画面
hogehoge/{id}/edit・・・編集画面
ただ、生成されたControllerでやってんのかなぁと思ったのだけど、なんか見当たらないというかどこかわからない。
生成されたControllerではSkinnyApiResourceActionsとSkinnyResourceActionsのoverrideしかない。
処理的にはvalidationとform生成のみ。綺麗に抽象化されているなぁ。。。
で、追っていくと、SkinnyResourceRoutesというtraitが定義しているよう。
こんな感じ。
val newUrl = get(s"${resourcesBasePath}/new")(newResource).as('new) val editUrl = get(s"${resourcesBasePath}/:${idParamName}/edit") { params.getAs[Id](idParamName).map(id => editResource(id)) getOrElse haltWithBody(404) }.as('edit)
追い続けるとすごい数のtraitが実装されている。おおう。
ということで、3スイング目はここまで。
追伸:
せらさんからコメントいただきました!!
https://gist.github.com/seratch/dd0314f4c9d74f9f9cf344c1db4bdc70
0 件のコメント:
コメントを投稿