Actions, Controllers and Results(翻译)
2017-04-29 11:33
531 查看
原文:Actions, Controllers and Results
一个play.api.mvc.Action就是一个(play.api.mvc.Request =>play.api.mvc.Result)函数,这个函数处理请求并生成发送给客户端的结果。
一个Action返回一个play.api.mvc.Result值,这个值代表HTTP发送给网络客户端的响应。在这个例子中Ok构建了一个含有text/plain响应体的200 OK的响应。
第一个最简单的方式仅用一个表达式块作为参数,返回结果:
这是创建Action的最简单的方式,但是我们不能获取到发送来的请求的引用。通常情况下,调用这个Action的HTTP请求是有用的。
因为可以使用另一个使用函数Request =>Result作为参数的Action构建器:
标记request参数为implicit,一般都很有用, 因为它可以被需要它的Api隐式使用:
创建Action值的最后一种方式是指定一个额外的BodyParser参数:
BodyParser将会在这个手册的后面讲到。现在你只需要知道使用默认的使用任何内容的Body分析器来创建Action值的其他方法.
注意:记住在Play以后的版本中将不支持把Controllers定义为对象。推荐使用类。
定义对象生成器最简单的方法是使用返回Action值的无参方法:
当然,Action生成器方法可以有参数,这些参数可以被Action闭包捕捉到。
这些结果被play.api.mvc.Result定义:
当然有几个创建通用结果的比较有用的方法,如上面例子的Ok结果:
这个生成和上面完全一样的结果。
这里是创建其他结果的几个例子:
这些所有的帮助方法可以在play.api.mvc.Results特质和伴生类中发现。
这是几个创建跳转结果的有用的帮助类:
默认使用303 SEE_OTHER应答体,但是如果你需要一个的话你可以设置一个更多特定状态码的应答体:
什么是Action?
一个Play应用接收的大多数请求都是通过Action处理的。一个play.api.mvc.Action就是一个(play.api.mvc.Request =>play.api.mvc.Result)函数,这个函数处理请求并生成发送给客户端的结果。
def echo = Action { request => Ok("Got request [" + request + "]") }
一个Action返回一个play.api.mvc.Result值,这个值代表HTTP发送给网络客户端的响应。在这个例子中Ok构建了一个含有text/plain响应体的200 OK的响应。
构建一个Action
play.api.mvc.Action伴生对象提供了几个比较有用的方法来构建Action值。第一个最简单的方式仅用一个表达式块作为参数,返回结果:
Action { Ok("Hello world") }
这是创建Action的最简单的方式,但是我们不能获取到发送来的请求的引用。通常情况下,调用这个Action的HTTP请求是有用的。
因为可以使用另一个使用函数Request =>Result作为参数的Action构建器:
Action { request => Ok("Got request [" + request + "]") }
标记request参数为implicit,一般都很有用, 因为它可以被需要它的Api隐式使用:
Action { implicit request => Ok("Got request [" + request + "]") }
创建Action值的最后一种方式是指定一个额外的BodyParser参数:
Action(parse.json) { implicit request => Ok("Got request [" + request + "]") }
BodyParser将会在这个手册的后面讲到。现在你只需要知道使用默认的使用任何内容的Body分析器来创建Action值的其他方法.
Controller是Action生成器
Controller只不过是一个生成Action值的对象。Controllers可以被定义为一个可以利用依赖注入的类或对象。注意:记住在Play以后的版本中将不支持把Controllers定义为对象。推荐使用类。
定义对象生成器最简单的方法是使用返回Action值的无参方法:
import play.api.mvc._ class Application extends Controller { def index = Action { Ok("It works!") } }
当然,Action生成器方法可以有参数,这些参数可以被Action闭包捕捉到。
def hello(name: String) = Action { Ok("Hello " + name) }
简单结果
现在我们仅把关注点放到简单结果上:一个带有状态码的HTTP结果,发送到网络客户端的一组HTTP头和体。这些结果被play.api.mvc.Result定义:
import play.api.http.HttpEntity def index = Action { Result( header = ResponseHeader(200, Map.empty), body = HttpEntity.Strict(ByteString("Hello world!"), Some("text/plain")) ) }
当然有几个创建通用结果的比较有用的方法,如上面例子的Ok结果:
def index = Action { Ok("Hello world!") }
这个生成和上面完全一样的结果。
这里是创建其他结果的几个例子:
val ok = Ok("Hello world!") val notFound = NotFound val pageNotFound = NotFound(Page not found) val badRequest = BadRequest(views.html.form(formWithErrors)) val oops = InternalServerError("Oops") val anyStatus = Status(488)("Strange response type")
这些所有的帮助方法可以在play.api.mvc.Results特质和伴生类中发现。
重定向也是一个简单结果
重定向浏览器到一个新的URL的是另一个简单的结果。然而,这些结果类型没有携带响应体。这是几个创建跳转结果的有用的帮助类:
def index = Action { Redirect("/user/home") }
默认使用303 SEE_OTHER应答体,但是如果你需要一个的话你可以设置一个更多特定状态码的应答体:
def index = Action { Redirect("/user/home", MOVED_PERMANENTLY) }
TODO虚拟页面
你可以使用定义为TODO的空的Action实现: 结果是标准的“还没有实现”结果页:def index(name:String) = TODO
相关文章推荐
- Actions, Controllers and Results【翻译】
- 1.1_Actions, Controllers and Results
- play framework2学习之旅<2.1>Actions, Controllers and Results
- 【二】Actions, Controllers and Results
- 11.【cocos2d翻译系列】Actions, Transformations and Effects--Animation
- Controllers and Actions
- Change Layout in Controllers and Actions in Zend Framework 2
- 7.【cocos2d翻译系列】Actions, Transformations and Effects--Composition actions
- 8.【cocos2d翻译系列】Actions, Transformations and Effects--Ease actions
- ASP.NET MVC 5 Controllers and Actions
- ASP.NET MVC Controllers and Actions
- 9.【cocos2d翻译系列】Actions, Transformations and Effects--Effect actions
- Asp.Net MVC 3【Controllers And Actions】
- ASP.NET MVC Controllers and Actions
- 10.【cocos2d翻译系列】Actions, Transformations and Effects--Special actions
- ASP.NET MVC Controllers and Actions
- Boost.Interprocess使用手册翻译之十二.架构和内部实现(Architecture and internals)
- ASP.NET Core 中文文档 第四章 MVC(4.1)Controllers, Actions 和 Action Results
- Show and Tell: A Neural Image Caption Generator 翻译
- 《Pro ASP.NET MVC 3 Framework》学习笔记之二十四【Controllers和Actions】