1

アクション作成ショーフォーム:

def create = Action {
    Ok(html.post.create(postForm))
}

このアクションを変更して、GETリクエストの場合はフォームを出力し、POSTリクエストの場合は別のアクションであるかのようにユーザー入力データを処理するようにするにはどうすればよいですか。

def newPost = Action { implicit request =>
   postForm.bindFromRequest.fold(
       errors => BadRequest(views.html.index(Posts.all(), errors)),
       label => {
           Posts.create(label)
           Redirect(routes.Application.posts)
       }
   )
}

つまり、この2つのアクションを組み合わせたいということです。

UPDATE1:GETおよびPOSTリクエストを処理する単一のアクションが必要です

4

2 に答える 2

4

両方のアクションをマージするのではなく、ルートを変更して、期待する動作を実現することをお勧めします。例えば:

GET    /create    controllers.Posts.create
POST   /create    controllers.Posts.newPost

いくつかの種類のリソース(投稿やコメントなど)がある場合は、パスにプレフィックスを追加して曖昧さを解消します。

GET    /post/create       controllers.Posts.create
POST   /post/create       controllers.Posts.newPost
GET    /comment/create    controllers.Comments.create
POST   /comment/create    controllers.Comments.newComment
于 2012-08-12T09:49:26.297 に答える
1

一度同じようなことをやってみましたが、本来のフレームワークのように使っていないことに気づきました。@paradigmaticが示したような別々のGETメソッドとPOSTメソッドを使用し、指定したような場合は"If we take adding comments to another action, we wouldn't be able to get infomation on post and comments in case an error occured (avoding copy-paste code)."、コントローラーメソッドの最後にページを好きなビューでレンダリングしますか?エラーなどの場合は、いつでもフラッシュスコープを使用できますか?http://www.playframework.org/documentation/2.0.2/ScalaSessionFlashこのフォームページを2つ以上のBeanでレンダリングし、それらをコントローラー側に送信して、関連するエラーメッセージとデータをキャッチすることもできます。

于 2012-08-12T11:14:42.263 に答える