2022/8/25 控制器中间件

控制器中间件

一、前期准备

(一)定义路由

设置 RESTFul 请求的资源路由

Route::resource('mymiddle','MyMiddleware')->vars(['mymiddle'=>'name]']);

注:resource 后面跟着的 vars方法是用于改变其中的变量名,默认的变量名是 id

read 的方法为例:
默认路由:

Route::get('mymiddle/:id','MyMiddleware/read');

修改变量名后的路由:

Route::get('mymiddle/:name','MyMiddleware/read');
(二)生成控制器

使用命令:

php think make:controller MyMiddleware

修改代码如下:

'hello','time'=>$time]);
    }

    public function save(Request $request)
    {
        $params = $request->param();
        $name = $params['name'];
        return JsonResponseHandler::succ('name '.$name.'保存成功');
    }

    public function read($name)
    {
        return JsonResponseHandler::succ('操作成功',['name'=>$name]);
    }


    public function edit($name)
    {
        return JsonResponseHandler::succ('将 name 为 '.$name.' 的数据找出来,并显示到页面');
    }
    public function delete($name)
    {
        return JsonResponseHandler::succ('name '.$name.'已经被删除');
    }
}

二、中间件

(一)生成中间件类

使用命令生成中间件:

php think make:middleware Check

修改中间件类,增加一个判断的逻辑,如果当前请求的 name 参数等于 think 的时候,就返回错误的响应:

param('name') == 'think'){
            return JsonResponseHandler::error('name 不能为 think');
        }
        return $next($request);
    }
}
(二)定义中间件别名

在应用 config 目录下的 middleware.php 中先预定义中间件(其实就是增加别名标识):

 [
        'check' => app\middleware\Check::class,
    ],
    // 优先级设置,此数组中的中间件会按照数组中的顺序优先执行
    'priority' => [],
];
(三)控制器中间件

MyMiddleware 控制器中定义 middleware 属性:

 ['only'=>['save','read']]
    ];
    public function index()
    {
        $time = date('Y-m-d H:i:s',time());
        return JsonResponseHandler::succ('操作成功',['greeting'=>'hello','time'=>$time]);
    }

    .
    .
    .
}

MyMiddleware 控制器新增的代码:

protected $middleware = [
    'check' => ['only'=>['save','read']]
];

only,只有。这段代码意为 check 中间件只拦截 MyMiddleware 控制器的 saveread 方法。

与之对应的还有 except 关键字。except,除了,即除了指定的方法,其他的方法都会拦截。

protected $middleware = [
    'check' => ['only'=>['save','read']]
];

这段代码意为 check 中间件除了 saveread 方法,其他方法都会拦截。

(四)测试

先注释 middleware 属性:
测试 save 方法,save 方法的路由:

POST mymiddle

调用接口:
2022/8/25 控制器中间件_第1张图片

取消 middleware 属性:
再次调用接口:
2022/8/25 控制器中间件_第2张图片

测试 delete 方法,delete 方法的路由如下:

DELETE mymiddleware/:name

调用 delete 接口,结果如下:
2022/8/25 控制器中间件_第3张图片

参考资料

  1. TP6 文档

你可能感兴趣的:(phpthinkphp6中间件)