控制器

如下代码所示,一个最简单的控制器代码。

  1. <?php
  2. namespace Test;
  3. use Imi\Controller\HttpController;
  4. use Imi\Server\Route\Annotation\Route;
  5. use Imi\Server\Route\Annotation\Action;
  6. use Imi\Server\Route\Annotation\Controller;
  7. /**
  8. * 一个简单的控制器
  9. * @Controller
  10. */
  11. class Index extends HttpController
  12. {
  13. /**
  14. * 一个动作
  15. * @Action
  16. * @Route(url="/")
  17. */
  18. public function index()
  19. {
  20. return $this->response->write('hello imi!');
  21. }
  22. }

访问地址:http://localhost:{port}/输出内容:

  1. hello imi!

属性

$request

请求信息对象,可以用于获取参数、请求头等,遵循 PSR-7 标准。

获取 GET 参数

public function get($name = null, $default = null)

$namenull时,返回全部

获取 POST 参数

public function post($name = null, $default = null)

获取 REQUEST 参数

request 数据包含 get/post/cookie

public function request($name = null, $default = null)

$namenull时,返回全部

是否存在 GET 参数

public function hasGet($name)

是否存在 POST 参数

public function hasPost($name)

是否存在 REQUEST 参数

request 数据包含 get/post/cookie

public function hasRequest($name)

public function getCookieParams()

public function getCookie($name, $default = null)

获取所有请求头

public function getHeaders()

请求头是否存在,不区分大小写

public function hasHeader($name)

获取请求头,不区分大小写,支持同名,返回数组

public function getHeader($name)

获取请求头,不区分大小写,支持同名,返回字符串

public function getHeaderLine($name)

获取请求方法 (GET/POST等)

public function getMethod()

获取 HTTP 协议版本

public function getProtocolVersion()

获取请求地址

public function getUri()

获取 IMI 中对应服务器的对象

public function getServerInstance(): \Imi\Server\Http\Server

获取上传的文件

public function getUploadedFiles()

返回值为Imi\Server\Http\Message\UploadedFile数组

获取 Server 信息

  1. var_dump($this->request->getServerParams());
  2. var_dump($this->request->getServerParam('path_info'));

输出:

  1. array(11) {
  2. ["request_method"]=>
  3. string(3) "GET"
  4. ["request_uri"]=>
  5. string(47) "/xxx.html"
  6. ["path_info"]=>
  7. string(47) "/xxx.html"
  8. ["request_time"]=>
  9. int(1538010416)
  10. ["request_time_float"]=>
  11. float(1538010417.6185)
  12. ["server_port"]=>
  13. int(8080)
  14. ["remote_port"]=>
  15. int(62687)
  16. ["remote_addr"]=>
  17. string(9) "127.0.0.1"
  18. ["master_time"]=>
  19. int(1538010416)
  20. ["server_protocol"]=>
  21. string(8) "HTTP/1.1"
  22. ["server_software"]=>
  23. string(18) "swoole-http-server"
  24. }
  25. string(47) "/xxx.html"

$response

响应对象,遵循 PSR-7 标准。

直接对该对象操作无效,需要如下使用才可。

  1. 操作后赋值:
    1. public function action()
    2. {
    3. $this->response = $this->response->write('hello imi!');
    4. }
  2. 操作后返回
    1. public function action()
    2. {
    3. return $this->response->write('hello imi!');
    4. }

重定向

public function redirect($url, $status = StatusCode::FOUND)

$status 是状态码,默认302,可以使用StatusCode::XXX常量

输出内容

public function write(string $content)

清空输出缓冲区

public function clear()

public function withCookie($key, $value, $expire = 0, $path = '/', $domain = '', $secure = false, $httponly = false)

设置GZIP压缩

public function withGzip(boolean $status, $level = null)

发送所有响应数据

public function send()

发送文件,一般用于文件下载

  1. /**
  2. * 发送文件,一般用于文件下载
  3. * @param string $filename 要发送的文件名称,文件不存在或没有访问权限sendfile会失败
  4. * @param integer $offset 上传文件的偏移量,可以指定从文件的中间部分开始传输数据。此特性可用于支持断点续传。
  5. * @param integer $length 发送数据的尺寸,默认为整个文件的尺寸
  6. * @return static
  7. */
  8. public function sendFile(string $filename, int $offset = 0, int $length = 0)

是否已结束请求

public function isEnded()

获取swoole响应对象

public function getSwooleResonse(): \swoole_http_response

获取对应的服务器

public function getServerInstance(): \Imi\Server\Http\Server

设置状态码

public function withStatus($code, $reasonPhrase = '')

设置返回头

public function withHeader($name, $value)

  1. $reponse->withHeader('test', 'v1');
  2. $reponse->withHeader('test', ['v2', 'v3']);
  3. // 最终header中test为v2,v3

添加返回头

public function withAddedHeader($name, $value)

  1. $reponse->withAddedHeader('test', 'v1');
  2. $reponse->withAddedHeader('test', ['v2', 'v3']);
  3. // 最终header中test为v1,v2,v3