美文网首页
Esayswoole控制器的使用- Middleware

Esayswoole控制器的使用- Middleware

作者: 骑蚂蚁上高速_jun | 来源:发表于2020-05-02 12:44 被阅读0次

    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";
        }
    }
    

    相关文章

      网友评论

          本文标题:Esayswoole控制器的使用- Middleware

          本文链接:https://www.haomeiwen.com/subject/oackghtx.html