# 响应 / Response <p class="uk-article-lead">响应,即服务器发送给客户端的 HTTP 响应。有两种类型,在下面,每个都有一个例子来说明源自控制器操作的响应是怎么构建的。</p> [toc=2] ## 字符串 使用 `response` 服务返回简单的字符串响应。 ```php public function indexAction() { return $this['response']->create('My content'); } ``` ## 已渲染的视图 Pagekit 能渲染视图并将相关的响应返回给你。只需要键 `$view` 设为包含标题(_title_)和视图名称(_name_)的数组,就能返回一个数组。 在数组中的所有其他参数,都可以在视图中访问。了解更多,请查阅[视图 & 模板](224137)。 ```php public function indexAction($name = '') { return [ '$view' => [ 'title' => 'Hello World', 'name' => 'hello:views/index.php', ], 'name' => $name ]; } ``` 如果不想用它来渲染下面这种主题响应,在 `$view` 数组中设置 `'layout' => false`。 ## 主题/Themed 主题响应将控制器的结果继承到由主题定义的布局中。只是简单地从控制器返回一个字符串。 ```php public function indexAction() { return 'My content'; } ``` ## JSON 有两种方式从控制器中返回 JSON 响应: 如果操作返回的是实现了 `\JsonSerializable` 的数组或对象,将会自动生成 `JsonResponse` 。 ```php public function jsonAction() { return ['error' => true, 'message' => 'There is nothing here. Move along.']; } ``` 当然, `response` 服务可以实现相同的事。 ```php public function jsonAction() { return $this['response']->json(['error' => true, 'message' => 'There is nothing here. Move along.']); } ``` ## 重定向 使用重定向响应对用户进行重定向。 ```php public function redirectAction() { return $this['response']->redirect('@hello/greet/name', ['name' => 'Someone']); } ``` ## 自定义响应和错误页面 使用 `create` 返回自定义 HTTP 响应。 ```php public function forbiddenAction() { return $this['response']->create('Permission denied.', 401); } ``` ## 流/Stream 流式响应允许将内容流式地返回到客户端。它将回调函数作为它的第一个参数。在回调函数中,对 `flush` 的调用会被直接发送到客户端。 ```php public function streamAction() { return $this['response']->stream(function() { echo 'Hello World'; flush(); echo 'Hello Pagekit'; flush(); }); } ``` ## 下载 下载响应让你可以发送文件到客户端。在大多数浏览器中,将 `Content-Disposition: attachment` 设为一个 _另存为/Save as_ 对话框。 ```php public function downloadAction() { return $this['response']->download('extensions/hello/extension.svg'); } ```