easyswoole是一个比较自由灵活的框架,用户可以根据自己的需求添加自己想要的中间件拦截。你可以根据自己需求在Conf/Event
中的onRequest
和onResponse
中添加全局前置和全局后置中间件做请求拦截和响应拦截,也可以在每个控制器中的onRequest
和onResponse
做特定接口的中间件拦截。
具体示例代码
在App下新建中间件文件夹Middleware,然后新建中间件类
- 前置中间件
namespace App\Middleware;
use Core\Http\Message\Status;
use Core\Http\Request;
use Core\Http\Response;
class CorsMiddleware
{
public function handle(Request $request, Response $response){
//务必要判断响应是否结束,结束则不执行
if ($response->isEndResponse()){
return;
}
$domain = $this->parseCrossOriginDomain();
$response->withHeader('Access-Control-Allow-Origin', 'www.easyswoole.com');
$response->withHeader('Access-Control-Allow-Credentials', 'true');
$response->withHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Connection, User-Agent, Cookie');
$response->withHeader('Access-Control-Allow-Methods', 'GET,HEAD,OPTIONS,POST,PUT');
$response->withHeader('Access-Control-Allow-Headers', 'authorization,content-type');
if ($request->getMethod() == 'OPTIONS') {
$response->writeJson(Status::CODE_OK);
$response->end();
return;
}
}
}
创建完这个跨域中间件之后,在Conf/Event
中的onRequest
中调用即可
function onRequest(Request $request, Response $response)
{
// TODO: Implement onRequest() method.
//跨域中间件
$corsMiddleware = new CorsMiddleware();
$corsMiddleware->handle($request, $response);
//获取执行版本控制
Di::getInstance()->get("version")->startControl();
}
- 后置中间件
使用方法和前置中间件类似,在Conf/Event
中的onResponse
中调用即可。
- 局部特定接口中间件
function onRequest($actionName)
{
parent::onRequest($actionName); // TODO: Change the autogenerated stub
$methodArr = array(
'index',
'login'
);
if (in_array($actionName, $methodArr)){
//跨域中间件
$corsMiddleware = new CorsMiddleware();
$corsMiddleware->handle($this->request(), $this->response());
}
}