认识控制器
控制器是 HTTP 请求进入业务代码的入口。Dispatcher 根据 URL 找到控制器和 Action,构造控制器对象,并把当前请求、响应对象交给它处理。
第一个控制器
沿用第一个 HTTP 接口中创建的 App/HttpController/Hello.php,不要覆盖安装模板自带的 Index.php。如果跳过了快速开始,可新建这个文件:
<?php
namespace App\HttpController;
use EasySwoole\Http\AbstractInterface\Controller;
class Hello extends Controller
{
public function index(): void
{
$this->response()->write('Hello EasySwoole');
}
}
请求:
php easyswoole.php server reload
curl http://127.0.0.1:9501/Hello/index
预期输出是 Hello EasySwoole。这里的 /Hello/index 分别对应类名 Hello 和公开方法 index();如果你已按快速开始注册 /api/hello,也可访问 http://127.0.0.1:9501/api/hello。修改控制器文件后先执行 reload;如果服务尚未启动,请先按启动 HTTP 服务启动。
控制器里有什么
基础 Controller 提供这些核心能力:
$request = $this->request(); // 当前请求
$response = $this->response(); // 当前响应
$action = $this->getActionName(); // 当前 Action 名称
$this->writeJson(200, ['ok' => true]);
$json = $this->json();
$xml = $this->xml();
其中 request()、response() 和 getActionName() 是 protected,用于控制器内部及子类。
本章使用的控制器基类
本章只使用 EasySwoole\Http\AbstractInterface\Controller。它不要求为类或 Action 写 Attribute;参数可通过 $this->request() 手动读取,响应通过 $this->response() 或 writeJson() 写入。想声明参数来源、自动校验并生成接口文档,读完普通控制器后再看注解控制器。
可访问的 Action
Dispatcher 只调用公开、非静态、且未被框架禁止的实例方法。不要把内部辅助方法声明为 public,否则它可能被 URL 当作 Action 访问。
private function findUser(int $id): ?array
{
// 内部方法使用 private/protected
}
建议目录
App/HttpController/
├── Router.php
├── Index.php
├── User.php
└── Admin/
└── User.php
下一章将说明这些文件如何映射到 URL。