# 响应 / 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');
}
```