Scala播放模板:使用HTTP POST反向路由

时间:2014-04-25 01:31:13

标签: scala playframework playframework-2.0

当反向路由到GET路由时,我只是做

<a href="@controllers.routes.Application.sayHello()">Hello</a>

这意味着有一条到sayHello函数的GET路由。如果它是POST并且需要附加的有效载荷怎么办? POST隐含了吗?如何附加有效载荷数据?

1 个答案:

答案 0 :(得分:1)

反向路由器的HTTP方法派生自您的路由配置文件。

以下是路由配置中的一个示例,其中我有两个不同的请求具有相同的URL但不同的HTTP方法指向不同的方法:

GET     /login                              controllers.Application.login
POST    /login                              controllers.Application.authenticate

Application控制器中的 login()方法只是流出HTML表单:

def login = Action { implicit request =>
    Ok(html.loginForm(loginForm))
}

authenticate()方法会将请求绑定到允许进一步处理的表单:

def authenticate = Action { implicit request =>
   loginForm.bindFromRequest.fold(
       formWithErrors => BadRequest(html.loginForm(formWithErrors)),
       user => {
            // OTHER CODE HERE
            Redirect(routes.Blog.createPost).withSession("user" -> user)
       }
   )      
}

第二种方法需要控制器中的表单定义:

val loginForm = Form(
    tuple(
        "username" -> text,
        "password" -> text
        ) verifying ("Invalid username or password", result => result match {
            case (username, password) => Account.authenticate(username, password).isDefined
        })
    )

因此,根据您在视图中放入反向路由器的方法,这是将用于请求的HTTP方法。