Scala 重头戏2.3:如何将参数传递给自定义操作
我当前的自定义操作是Scala 重头戏2.3:如何将参数传递给自定义操作,scala,playframework,Scala,Playframework,我当前的自定义操作是 class UserRequest[A](val user: Option[models.UserProfile], request: Request[A]) extends WrappedRequest[A](request) object UserAction extends ActionBuilder[UserRequest] with ActionTransformer[Request, UserRequest] {
class UserRequest[A](val user: Option[models.UserProfile],
request: Request[A]) extends WrappedRequest[A](request)
object UserAction extends ActionBuilder[UserRequest] with ActionTransformer[Request, UserRequest] {
def transform[A](request: Request[A]) = Future.successful {
val user = ... get user from session
new UserRequest(user, request)
}
}
此外,我想向UserAction传递一个参数(例如,要验证的角色)。所以在控制器中,我可以这样使用它:
def admin = UserAction("admin") { Ok("granted") }
我不知道你为什么要做这样的事情,但你可以通过以下方式实现:
class UserRequest[A](val user: Option[models.UserProfile],
request: Request[A]) extends WrappedRequest[A](request)
object UserActionInner extends ActionBuilder[UserRequest] with ActionTransformer[Request, UserRequest] {
def transform[A](request: Request[A]) = Future.successful {
val user = ... get user from session
new UserRequest(user, request)
}
}
object UserAction {
def apply[ A ]( str: String )( block: Request[ A ] => Future[ Result ] ) {
// do something with your str
// Now let UserActionInner do the job
UserActionInner( block )
}
}
// Now you can use it like this.
def admin = UserAction("admin") { Ok("granted") }
使用带有
role
参数的case类,而不是对象,应该可以获得所需的效果:
case类UserAction(角色:String)使用ActionTransformer[Request,UserRequest]扩展ActionBuilder[UserRequest]{
覆盖def转换[A](请求:请求[A])=。。。
}