控制器中间件
一、后期筹备
(一)定义路由
设置 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
批改代码如下:
<?phpdeclare (strict_types = 1);namespace app\controller;use think\Request;use app\handlers\JsonResponseHandler;use think\response\Json;class MyMiddleware{ public function index() { $time = date('Y-m-d H:i:s',time()); return JsonResponseHandler::succ('操作胜利',['greeting'=>'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
的时候,就返回谬误的响应:
<?phpdeclare (strict_types = 1);namespace app\middleware;use app\handlers\JsonResponseHandler;class Check{ /** * 解决申请 * * @param \think\Request $request * @param \Closure $next * @return Response */ public function handle($request, \Closure $next) { if($request->param('name') == 'think'){ return JsonResponseHandler::error('name 不能为 think'); } return $next($request); }}
(二)定义中间件别名
在利用 config
目录下的 middleware.php
中先预约义中间件(其实就是减少别名标识):
<?php// 中间件配置return [ // 别名或分组 'alias' => [ 'check' => app\middleware\Check::class, ], // 优先级设置,此数组中的中间件会依照数组中的程序优先执行 'priority' => [],];
(三)控制器中间件
在 MyMiddleware
控制器中定义 middleware
属性:
<?phpdeclare (strict_types = 1);namespace app\controller;use think\Request;use app\handlers\JsonResponseHandler;use think\response\Json;class MyMiddleware{ // 定义 middleware 属性 protected $middleware = [ 'check' => ['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
控制器的 save
和 read
办法。
与之对应的还有 except
关键字。except
,除了,即除了指定的办法,其余的办法都会拦挡。
protected $middleware = [ 'check' => ['only'=>['save','read']]];
这段代码意为 check
中间件除了 save
、read
办法,其余办法都会拦挡。
(四)测试
先正文 middleware
属性:
测试 save
办法,save
办法的路由:
POST mymiddle
调用接口:
勾销 middleware
属性:
再次调用接口:
参考资料
- TP6 文档