2012-04-08 8 views
2

私はの線に沿って何かをしたいと思います:スタッキングアクションFramework 2.0の

2(およびそれ以上)は、互換的に使用、または次のようにすることができ
def findUser[ A ](bp: BodyParser[ A ])(id: Int)(f: User => Action[ A ] => Result) 
def findProfile[ A ](bp: BodyParser[ A ])(id: Int)(f: Profile => Action[ A ] => Result) 

def create = findUser(parse.json) { user => findProfile(parse.json) { profile => implicit request => ... 

私がparse.jsonと関係している2つの問題(これは、JsValueをアクションのボディパーサーとして渡して署名から削除することで解決できると思います。これらのうちの1つ以上を使用できる意欲的な行動...任意のアイデア?

ありがとう!

更新

答えはコメントに答えるために移動...

+0

解決策は自分の回答でなければならないのでしょうか? –

答えて

1

は、私はそれが次のシグネチャと協力を得ることができました。ここではボディパーサーをリファクタリングしています...これらのヘルパー関数(bodyParser、findUser、findProfile)を特性に入れてコントローラを拡張することができます...また、ボディパーサーをシグネチャから完全に削除してパーズを渡すこともできます。 jsonを操作し、findUser()(id)の代わりにfindUser(id)を生成します。

val bodyParser = parse.json //(I had to include the entire path to it...) 
def findUser[ A ](bp: BodyParser[ A ] = bodyParser)(id: Int)(f: User => Request[ A ] => Result) 

def find(id: Int) = 
    IsLoggedIn() { 
     findUser()(id) { 
     user => 
     findProfile()(user.id){ 
      profile => 
      request => 
       Ok(toJson(profile)) 
} } } 

クリーンな方法がわかっている場合は、教えてください。