目录
[TOC]
## 返回响应
你可以在路由闭包或控制器方法中返回响应数据。框架会将响应数据构建成 HTTP 响应返回给客户端。
## 响应返回值
### 数组、对象
当返回数组、对象时,框架会将返回值编码为 json 数据作为 HTTP 响应主体返回给用户。
### 字符串
当返回字符串时,框架会原封不动的将字符串作为 HTTP 响应主体返回给用户。
### 闭包
返回闭包时框架会在构建 HTTP Response 时执行闭包。默认以空字符串作为 HTTP 响应主体返回给用户。
## header
WorkerF\Http\Response 类的 header($headers) 方法可以为 HTTP 响应添加首部信息。
例子:
```php
namespace App\Controller;
use App\Controller\Controller;
use WorkerF\Http\Response;
class TestController extends Controller
{
public function test()
{
// 为 HTTP 响应添加首部
Response::header('Content-Type: text/plain');
return 'some data';
}
}
```
你也可以一传入一个数组添加多个首部:
```php
namespace App\Controller;
use App\Controller\Controller;
use WorkerF\Http\Response;
class TestController extends Controller
{
public function test()
{
$headers = [
'Content-Type: text/plain',
'Content-Encoding: gzip',
];
Response::header();
return 'some data';
}
}
```
## redirect
WorkerF\Http\Response 类的 redirect($path) 方法提供了一个底层的 URL 重定向功能,WorkerF\Http\Route::redirect() 方法就是基于此方法。
同样,redirect 方法的返回值也需要被路由闭包或控制器方法返回才有效。
```php
namespace App\Controller;
use App\Controller\Controller;
use WorkerF\Http\Response;
class TestController extends Controller
{
public function test()
{
// URL 重定向,必须返回才有效
return Response::redirect('http://www.test.com');;
}
}
```
## session
在 WorkerA 中你可以直接使用 workerman 的原生方法来处理会话。
开启会话:
```php
use Workerman\Protocols\Http;
...
Http::sessionStart();
```
设置 session:
```php
use Workerman\Protocols\Http;
...
Http::sessionStart();
$_SESSION['test'] = 'hello';
```
获取 session:
```php
use Workerman\Protocols\Http;
...
Http::sessionStart();
$test = $_SESSION['test'];
```
## cookie
同样,你可以使用 workerman 提供的 setCookie 方法来设置 cookie。
```php
use Workerman\Protocols\Http;
...
$name = 'test';
$value = '11223';
$maxage = 0;
$path = '/';
$domain = 'test.com';
$secure = false;
$HTTPOnly = true;
Http::setCookie($name, $value, $maxage, $path, $domain, $secure, $HTTPOnly);
```
> 注:也可以使用 WorkerF\Http\Response::header 方法设置 Set-Cookie 响应头实现。
## 响应压缩编码
不同于 apache 和 nginx 的环境,HTTP 响应主体的压缩编码需要框架来做。WorkerA 实现了对 HTTP 响应主体的编码功能,支持 gzip 和 deflate 编码格式。
压缩编码的配置在配置文件 config/app.php 中:
```php
'compress' => [
// 编码格式,如果无需编码,设置为 ''
'encoding' => 'gzip',
// 压缩等级,从 1 到 9
'level' => '5',
// 接受压缩的内容,其他类型不会被压缩
'content_type' => [
'application/json',
'text/html',
],
],
```