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']]
];
【2022/8/25 控制器中间件】
only
,只有。这段代码意为 check
中间件只拦截 MyMiddleware
控制器的 save
和 read
方法。与之对应的还有
except
关键字。except
,除了,即除了指定的方法,其他的方法都会拦截。protected $middleware = [
'check' => ['only'=>['save','read']]
];
这段代码意为
check
中间件除了 save
、read
方法,其他方法都会拦截。(四)测试 先注释
middleware
属性:测试
save
方法,save
方法的路由:POST mymiddle
调用接口:
文章图片
取消
middleware
属性:再次调用接口:
文章图片
测试
delete
方法,delete
方法的路由如下:DELETE mymiddleware/:name
调用
delete
接口,结果如下:文章图片
参考资料
- TP6 文档
推荐阅读
- 投稿|2021-2022年文化主题酒店发展报告
- 汽车出行|AITO问界M7发布51天后开启交付,营销服务网络超700家
- 投稿|QuestMobile2022智能清洁家电营销及用户洞察
- 中间件——(六)RabbitMQ整合SpringCloudStream
- RabbitMQ|消息中间件RabbitMQ(五)——实现RPC调用
- 2022 全国大学生操作系统大赛圆满落幕 龙蜥推动人才培养与产业发展深度融合
- 看财报|盐湖股份2022年上半年归母净利91.58亿,同比增加333.09%,氯化钾和碳酸锂产销火热 | 看财报
- 机器学习|NTU20220813-数据结构化和深度学习-WSL音频转发
- After Effects 2022(Mac视频特效制作工具 v22.6.0)
- 代码片段-需要登录的控制器代码实现