現在params
、関数を使用して、URL に投稿されたデータを取得しています。
Play Framework のように Scalatra でフォームを処理する方法は他にありますか? Scalatra は、フォームの作成とフォームへの自動入力の両方に使用できるオブジェクトをサポートしていますか?
Scalatra はそのような複雑な機能を提供していません。実装が難しいという意味では複雑ではありません。その複雑さは、一緒にプレイするパーティの数に由来します。
まず第一にModel
、ドメイン内のオブジェクトを表すには が必要であり、Scalatra はデフォルトでモデル ライブラリを提供していません。このモデルは、HTTP 要求で設定された任意の文字列をモデルのインスタンスに変換するために、ランタイムによって使用されます。例えば
GET
ようなパラメータが指定されている場合user.id
、バインディング ソフトウェアは、この文字列をタイプ のオブジェクトに変換します。このオブジェクトはUser
、ID によってデータベース内で検出されます。POST
、 のような 3 つのパラメーターを指定しuser.name
、user.password
を指定user.birthday
しない場合、ランタイムは、DB に配置する準備ができているuser.id
タイプのオブジェクトを単純な-で構築します。クラスUser
User.save()
User
PUT
(または Scalatra のドキュメントで説明されている同等のもの) であり、 and を含むuser.id
場合user.birthday
、最初に anUser
が ID によって取得され、次にその誕生日が更新され、最終的にコントローラーで利用可能になり、呼び出しの準備が整います。User.save()
ご覧のとおり、これにはモデル ライブラリ、バインディング ライブラリ、およびランタイムでのグルー サポートが必要です。
HTML フォームを生成するには、モデルを検査して HTML ビットを出力できるヘルパー ライブラリが必要です。たとえば、ライブラリがUser
クラスを検査し、3 つのパブリック フィールドname
、password
およびがあることを検出し、入力の名前としてbirthday
使用する慣例に従って、出力を検出するとします。<model>.<property>
<form action="$$$$" method="$$$$">
<input name="user.name" />
<input name="user.password" />
<input name="user.birthday" />
<input type="submit" />
</form>
ご了承ください
User
このフォームから送信されたオブジェクトを逆シリアル化するには、バインド ライブラリで同じ命名規則を使用する必要があります。すべての部品を組み立てたら、MVC フレームワークを作成したことになります。では、Scalatra のような小さな RESTful ソフトウェアを使用する意味は何ですか?