tp6 中间件的常用操作


小星星
星星 2022-09-21 09:18:42 65089
分类专栏: 资讯

目录

1、中间件的初始化工作

2、前置和后置中间件区别

3、中间件给主页面传值

4、中间件的工作顺序


1、中间件的初始化工作

使用中间件首先得创建中间件,可以通过cmd找到对应tp6项目路径,输入以下composer命令自动创建中间件目录及文件

php think make:middleware Check

创建好后如图:

也可以手动创建middleware目录和对应文件:

  1. -meta"><?php
  2. declare (strict_types = 1);
  3. namespace app\middleware;
  4. use think\Response;
  5. -class">class Check
  6. {
  7. /**
  8. * 处理请求
  9. *
  10. * -doctag">@param \think\Request $request
  11. * -doctag">@param \Closure $next
  12. * -doctag">@return Response
  13. */
  14. public function handle(-variable">$request, \Closure -variable">$next)
  15. {
  16. //
  17. }
  18. }

 中间件使用需先声明,声明方法如下:

1、找到route/middleware.php写入对应声明,如下
  1. -meta"><?php
  2. // 全局中间件定义文件
  3. return [
  4. // 全局请求缓存
  5. // \think\middleware\CheckRequestCache::class,
  6. // 多语言加载
  7. // \think\middleware\LoadLangPack::class,
  8. // Session初始化
  9. // \think\middleware\SessionInit::class
  10. \app\middleware\Check2::-variable language_">class,//方法一,直接引入声明
  11. 'check',//方法二,别名引入法
  12. ];
2、使用方法二别名引入时,需要先到config/middleware.php里配置别名,配置方法如下:
  1. -meta"><?php
  2. // 中间件配置
  3. return [
  4. // 别名或分组
  5. 'alias' => [
  6. 'check'=>\app\middleware\Check::-variable language_">class,
  7. 'check2'=>\app\middleware\Check2::-variable language_">class,
  8. ],
  9. // 优先级设置,此数组中的中间件会按照数组中的顺序优先执行
  10. 'priority' => [],
  11. ];

这样第一步里就可以直接使用别名进行声明了。

3、还有一种比较常用的中间件使用方法,就是不通过1、2声明,而使用路由中间件
  1. 路由中间件声明方法如下:
  2. 找到对应的路由文件,如route/app.php书写如下:
  1. -meta"><?php
  2. // +----------------------------------------------------------------------
  3. // | ThinkPHP [ WE CAN DO IT JUST THINK ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
  8. // +----------------------------------------------------------------------
  9. // | Author: liu21st <liu21st@gmail.com>
  10. // +----------------------------------------------------------------------
  11. use think\facade\Route;
  12. Route::rule('hhh','test/index')->middleware(\app\middleware\Check2::-variable language_">class);

这样访问路径时便可以通过该中间件进行限制。

2、前置和后置中间件区别

前置和后置中间件都是很常用的:

前置中间件的通常写法:

  1. -meta"><?php
  2. namespace app\middleware;
  3. -class">class Before
  4. {
  5. public function handle(-variable">$request, \Closure -variable">$next)
  6. {
  7. // 添加中间件执行代码
  8. return -variable">$next(-variable">$request);
  9. }
  10. }

后置中间件的通常写法:

  1. -meta"><?php
  2. namespace app\middleware;
  3. -class">class After
  4. {
  5. public function handle(-variable">$request, \Closure -variable">$next)
  6. {
  7. -variable">$response = -variable">$next(-variable">$request);
  8. // 添加中间件执行代码
  9. return -variable">$response;
  10. }
  11. }

也可以写在一起:

  1. public function handle1(-variable">$request,\Closure -variable">$next){
  2. //处理HTTP请求,中间键代码
  3. if(-variable">$request->param('name')==='index'){
  4. return redirect('../');//返回首页
  5. }
  6. //以上部分为前置中间件
  7. echo "前置中间件<br>";
  8. //获取响应,获取响应之前的代码为前置中间件,
  9. -variable">$response=-variable">$next(-variable">$request);
  10. //获取响应之后的为后置中间件的执行内容
  11. //以后部分为后置中间件
  12. echo "后置中间件<br>";
  13. //这里回调本身返回response对象
  14. return -variable">$response;
  15. }

可以看到前置和后置中间件的执行区别就在于是否在获取$next($request)前或后。

通过还有个收尾工作可以附加,就是在中间件中写入end方法如下:

  1. public function end(Response -variable">$response){
  2. echo '<br>收尾工作';
  3. }

执行先后顺序如下:

3、中间件给主页面传值

比较简单的传值如下:

可以通过给请求对象赋值的方式传参给控制器(或者其它地方),例如

  1. -meta"><?php
  2. namespace app\middleware;
  3. -class">class Hello
  4. {
  5. public function handle(-variable">$request, \Closure -variable">$next)
  6. {
  7. -variable">$request->hello = 'ThinkPHP';
  8. return -variable">$next(-variable">$request);
  9. }
  10. }

然后在控制器的方法里面可以直接使用

  1. public function index(Request -variable">$request)
  2. {
  3. return -variable">$request->hello; // ThinkPHP
  4. }

4、中间件的工作顺序

全局中间件>局部中间件>路由中间件>页面组件

中间件的内部执行顺序为:前置>页面操作>后置>return操作>end收尾

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=8778
赞同 0
评论 0 条
星星L0
粉丝 0 发表 8 + 关注 私信
上周热门
银河麒麟添加网络打印机时,出现“client-error-not-possible”错误提示  1448
银河麒麟打印带有图像的文档时出错  1365
银河麒麟添加打印机时,出现“server-error-internal-error”  1151
统信桌面专业版【如何查询系统安装时间】  1073
统信操作系统各版本介绍  1070
统信桌面专业版【全盘安装UOS系统】介绍  1028
麒麟系统也能完整体验微信啦!  984
统信【启动盘制作工具】使用介绍  627
统信桌面专业版【一个U盘做多个系统启动盘】的方法  575
信刻全自动档案蓝光光盘检测一体机  484
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

添加我为好友,拉您入交流群!

请使用微信扫一扫!