响应处理

每个路由对应控制器方法,并且方法需要返回对应响应信息,完成一次完整的请求响应。

响应体

利用框架提供的 json 函数,能够快速向客户端输出 json 格式的数据。

  1. <?php
  2. namespace Controller;
  3. use FastD\Http\ServerRequest;
  4. class IndexController
  5. {
  6. public function sayHello(ServerRequest $request)
  7. {
  8. return json([
  9. 'foo' => 'bar'
  10. ]);
  11. }
  12. }

如果需要响应特殊的 http 状态码,可以通过第二个参数进行调整。

  1. <?php
  2. namespace Controller;
  3. use FastD\Http\ServerRequest;
  4. class IndexController
  5. {
  6. public function sayHello(ServerRequest $request)
  7. {
  8. return json([
  9. 'foo' => 'bar'
  10. ], 201);
  11. }
  12. }

响应头

当如果需要自定义一些响应头的时候,可以利用 PSR7 Response 对象方法来设置响应头.

  1. <?php
  2. namespace Controller;
  3. use FastD\Http\ServerRequest;
  4. class IndexController
  5. {
  6. public function sayHello(ServerRequest $request)
  7. {
  8. return json([
  9. 'args' => $request->getParsedBody()
  10. ])->withHeader('foo', 'bar');
  11. }
  12. }

利用响应头,设置 cookie 信息,框架 cookie 的实现也是利用 header 函数进行实现的。

  1. <?php
  2. namespace Controller;
  3. use FastD\Http\ServerRequest;
  4. class IndexController
  5. {
  6. public function sayHello(ServerRequest $request)
  7. {
  8. return json([
  9. 'args' => $request->getParsedBody()
  10. ])->withCookie('foo', 'bar');
  11. }
  12. }
设置 cache-control

Response 对象还提供了常用的 http 缓存配置。

  1. <?php
  2. namespace Controller;
  3. use FastD\Http\ServerRequest;
  4. class IndexController
  5. {
  6. public function sayHello(ServerRequest $request)
  7. {
  8. return json([
  9. 'args' => $request->getParsedBody()
  10. ])->withCacheControl('public')
  11. ->withExpires(new \DateTime('2017-10-11'));
  12. }
  13. }

text/html 格式

因为框架定位在 API 开发上,框架默认提供的数据格式是: json。因此由小部分场景其实是无需使用json,那么就需要直接通过 Response 对内容进行自定义输出。

  1. <?php
  2. namespace Controller;
  3. use FastD\Http\Response;
  4. use FastD\Http\ServerRequest;
  5. class IndexController
  6. {
  7. public function sayHello(ServerRequest $request)
  8. {
  9. return new Response('hello world');
  10. }
  11. }

下一节: 中间件