2012-04-08 46 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)) 
} } } 

如果你知道更清洁的方式,请告诉我。