2012-04-08 76 views
2

我想要做的線沿線的東西:當兩個(及以上)可以互換使用在遊戲框架堆疊行爲2.0

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(我認爲我可以通過在操作中將JsValue作爲身體解析器傳遞並從簽名中移除它來修復)。並且可以使用其中的一個或多個隨意行動......任何想法?

謝謝!

更新

感動的答案來回答評論...

+0

解決方案不應該在它自己的答案嗎? – 2012-04-09 18:03:25

回答

1

我能得到它具有以下簽名工作。這裏是重構的主體解析器...您可以將這些幫助器函數(bodyParser,findUser,findProfile)放入一個trait中,並使用它們擴展控制器...您也可以從簽名中完全移除主體解析器並傳遞解析。 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)) 
} } } 

如果你知道更清潔的方式,請告訴我。