Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 重头戏2.3:如何将参数传递给自定义操作_Scala_Playframework - Fatal编程技术网

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])=。。。
}