easyswoole 没有类似 Laravel 框架那样的中间件处理类文件,只存在有控制器基类中
EasySwoole\Http\AbstractInterface\Controller 的请求前方法[ onRequest] 和 请求后方法[ afterAction ]
开发者可以重写这两个方法 也可以实现类似中间件的功能。
<?php
namespace App\HttpController;
use EasySwoole\Http\AbstractInterface\Controller;
/**
* 控制器基类
*/
class BaseController extends Controller
{
/**
* 用户访问 不存在的路由执行
* 该方法可以做 404
* @param string|null $action
*/
protected function actionNotFound(?string $action)
{
$this->response()->withStatus(404);
$this->response()->withHeader("Content-type","text/html;charset=utf-8");
$this->response()->write("对不起,页面找不到了");
}
/**
* 控制器中的请求前执行的方法
* 该方法可以做一些鉴权业务
* 类似前置中间件
* 返回 true 则可继续执行控制器的,返回false 则不执行控制器方法
* @param string|null $action
* @return bool|null
*/
protected function onRequest(?string $action): ?bool
{
// 模拟业务中 get 参数的token=123456 则可以继续执行
$token = $this->request()->getQueryParam("token");
if($token == "123456"){
return true;
}
$this->response()->withStatus(401);
$this->response()->withHeader("Content-type","application/json;chatset=utf-8");
// 返回客户端 表示无权限访问
$this->response()->write(json_encode(["code"=>401,"msg"=>"无权限访问"],JSON_UNESCAPED_UNICODE));
return false;
}
/**
* 控制器方法执行后 的执行方法
* 该方法 无论是访问路径不存在,还是控制器方法不执行,还是控制器方法异常。都会执行结尾方法
* @param string|null $actionName
*/
protected function afterAction(?string $actionName): void
{
echo "结尾工作\n";
}
}
网友评论