控制器
目录
所有的请求都会打进控制器,我们开发项目时候,处理请求基本都是在控制器里做。
如下代码所示,一个最简单的控制器代码。
基本控制器
<?php
namespace Test;
use Imi\Controller\HttpController;
use Imi\Server\Http\Route\Annotation\Route;
use Imi\Server\Http\Route\Annotation\Action;
use Imi\Server\Http\Route\Annotation\Controller;
/**
* 一个简单的控制器
* @Controller
*/
class Index extends HttpController
{
/**
* 一个动作
* @Action
* @Route(url="/")
*/
public function index()
{
$this->response->getBody()->write('hello imi!');
return $this->response;
}
}
访问地址:http://localhost:{port}/
输出内容:
hello imi!
Swoole 中的禁忌用法
控制器是单例的,Swoole 环境下运行不适合赋值取值静态变量、类属性。
<?php
namespace Test;
use Imi\Controller\HttpController;
use Imi\Server\Http\Route\Annotation\Route;
use Imi\Server\Http\Route\Annotation\Action;
use Imi\Server\Http\Route\Annotation\Controller;
/**
* 一个简单的控制器
* @Controller
*/
class Index extends HttpController
{
private $id;
public function __construct()
{
// 这个是有问题的,只会在第一次请求时候执行
$this->id = $this->request->get('id');
}
}
绑定请求参数到控制器方法参数
详见:链接
属性
$server
详见:链接
$request
请求信息对象,可以用于获取参数、请求头等,遵循 PSR-7 标准。
$response
响应对象,遵循 PSR-7 标准。
直接对该对象调用 withXXX()
无效,需要如下使用才可。
操作后赋值:
public function action() { $this->response = $this->response->withStatus(404); }
操作后返回:
public function action() { return $this->response->withStatus(404); }
或者可以直接使用 setXXX()
:
public function action()
{
$this->response->setStatus(404);
}