easyswoole是一个比较自由灵活的框架,用户可以根据自己的需求添加自己想要的中间件拦截。你可以根据自己需求在Conf/Event中的onRequestonResponse中添加全局前置和全局后置中间件做请求拦截和响应拦截,也可以在每个控制器中的onRequestonResponse做特定接口的中间件拦截。

具体示例代码

在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());
    }
}

results matching ""

    No results matching ""