我自己学习游戏框架。
路由器中的查询字符串和路径参数有什么区别?以及PathBindable
和QueryStringBindable
之间的区别是什么?
答案 0 :(得分:0)
它在文档中描述:
https://www.playframework.com/documentation/2.5.x/ScalaRouting https://www.playframework.com/documentation/2.5.x/ScalaRequestBinders
简而言之,path参数是URL中的参数:
# Client, like /clients/125
GET /clients/:id controllers.Clients.show(id: Long)
查询字符串参数是查询字符串参数:
# Pagination links, like /clients?page=3
GET /clients controllers.Clients.list(page: Int ?= 1)
您可以看到,在此示例中,Play将参数从字符串绑定到其他类型,例如Long
和Int
。在某些情况下,您希望将参数绑定到其他类型,然后您需要编写自己的绑定器。路径参数为PathBindable
,查询参数为QueryStringBindable
。
因此,如果您可以将客户端ID绑定到客户端,则可以编写
# Client, like /clients/125
GET /clients/:id controllers.Clients.show(client: Client)
和活页夹:
implicit def pathBinder(implicit intBinder: PathBindable[Int]) = new PathBindable[Client] {
override def bind(key: String, value: String): Either[String, Client] = {
for {
id <- intBinder.bind(key, value).right
client <- Client.findById(id).toRight("Client not found").right
} yield client
}
override def unbind(key: String, client: Client): String = {
client.id.toString
}
}
如果您想完全控制URL解析和绑定,您可以更进一步使用String Interpolating Routing DSL