Scala Play 2, passing request to method

2019-02-12 15:55发布

I have a Play 2.0 app

TestController.scala

def foo(p1: String) = Action {implicit request =>
  Ok(bar(p1))
}

private def bar(p1: String) = {
//access request parameter here
}

Is there a way to use implicit to pass request to bar

1条回答
Root(大扎)
2楼-- · 2019-02-12 16:32

Yes, you can:

  def foo(p1: String) = Action { implicit request =>
    Ok(bar(p1))
  }

  private def bar(p1: String)(implicit req: RequestHeader) = "content"

The code:

Action { implicit request

Calls this method on the Action object:

def apply(block: Request[AnyContent] => Result): Action[AnyContent] = {

So, what you called "request" matches the paramater named "block". The "implicit" here is optional: it makes the "request" value available as an implicit parameter to other method/function calls.

The implicit in your "bar" function says that it can take the value of "req" from an implicit value, and doesn't necessarily need to be passed in explicitly.

查看更多
登录 后发表回答