thinkphp6 中间件使用笔记

hykeda4年前ThinkPHP549

最近开发三频道打通程序时用到了中间件,现总结一下:

第一步:首先用命令行生成中间件

php think make:middleware Check

这个指令会 app/middleware目录下面生成一个Check中间

注:需要用到几个中间件就执行几次,生成几个,此处我生成了一个check的中间件。

<?php

namespace app\middleware;
class Check{
    public function handle($request, \Closure $next)
    {

        return $next($request);
    }
}

会自动生成一个handle方法,并且必须返回response对象,此处为$request。

在中间件执行结束时,如果定义了end方法,会被回调执行

public function end(\think\Response $response)
    {
        // 回调行为
    }

注意,在end方法里面不能有任何的响应输出。因为回调触发的时候请求响应输出已经完成了。

中间件可以向request对象中注入变量,比如:

public function handle($request, \Closure $next)
    {
        if (preg_match('~micromessenger~i', $request->header('user-agent'))) {
            $request->InApp = 'WeChat';
        } else if (preg_match('~alipay~i', $request->header('user-agent'))) {
            $request->InApp = 'Alipay';
        }
        return $next($request);
    }

这里判断了useragent是微信还是支付宝,将结果注入到InApp变量中,其他地方用的判断是直接用$request->InApp就可以访问到了。

全局中间app目录下面middleware.php文件中定义,使用下面的方式:

<?php return [ \app\middleware\Auth::class,    'check',    'Hello', ];

<?php
return [
	[\app\middleware\Check::class,'abc']
    ];

这里的abc是传入的参数,就是handle方法中第三个参数,handle($request,\Closure $next,$param),如果没有参数就直接不用数组形式就可以了。

应用中间件就是把middleware.php文件放到对应的应用里面,比如index,admin文件夹里面就可以了。

讲一下我用的的控制器中间件不需要用到middleware.php文件,这点和tp5好像不一样。

在控制器中定义中间件:


use app\middleware\Check;


protected $middleware = [
   Check::
class => ['except'=> ['index']]
];

这里是除了index方法不调用中间件,其他方法都会去调用check这个中间件。这里注意中间件的命名空间,保证正常引入。

如果全部方法都要调用:

protected $middleware = [
   Check::class
];



标签: 中间件

相关文章

Thinkphp5 记录点,注意点

json对象转成数组 先用$flag->getContent() $flag = json_decode($flag->getContent(),true); 控制器: 1、当控制器...

Thinkphp5 创建模块

一、创建三个模块 Common(公共模块),Index(前台模块),Admin(后台模块)。 index.php实际配置 <?php // 定义应用目录 define('APP_...

关于thinkphp5.1钩子和行为的个人理解和使用

关于thinkphp5.1钩子和行为的个人理解和使用

thinkphp5中的钩子和行为属于AOP编程思想,类似于AOP编程中的“切面”的概念,简单理解就是一个切入点,可以大大增加程序的耦合性。如何使用钩子和行为来开发:首先在项目中创建一个行为文件夹:1、...

thinkphp6 使用中的注意点

thinkphp6 使用中的注意点

1、TP6中采用多应用模式需要安装  composer require topthink/think-multi-app如果需要使用view,还必须安装模板引擎...

thinkphp5页面出现500服务器内部错误

    最近写项目发现页面显示正常,控制器单独输出调试都正常,数据返回了,但还是报错get请求报错500服务器内部错误。  &nbs...

thinkphp5 微信token验证不通过

刚想接入下微信公众平台,用了最新的tp5,之前用的是tp3.2.3,发现配置好文件后,微信后台一直提示token验证失败。 但是直接在入口文件写echo $_GET["echostr"];就会提...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。