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
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.
def foo[A](i: Int)(implicit request: Request[A]): Baz = { ... }. This error was fixed by changing Request[A] to instead use RequestHeader. Thanks Adam Rabung- your info was a big help.