关于thinkphp5.1中间件的使用

hykeda7年前ThinkPHP2034

在tp5.1开始,有了中间件的概念。

首先中间件主要用于拦截或过滤应用的HTTP请求,并进行必要的业务处理。

生成中间件:

php think make:middleware Check
执行这个语句会生成一个这个指令会 application/http/middleware目录下面生成一个Check中间件。Check可以自己定义名称,下面是一个例子:


<?php

namespace app\http\middleware;

class Check
{
    public function handle($request, \Closure $next)
    {
        if ($request->param('name') == 'think') {
            return redirect('index/think');
        }

        return $next($request);
    }
}

前后置中间件说明

至于前置中间件,后置中间件的问题其实不存在什么程序上的前后置,因为中间件没有前后置之分,这个分是用户自己去定义的,比如把验证Auto叫做前置中间件,Log叫做后置中间件,然后在使用的时候先调用Auto,在调用Log而已。只是一个叫法。

比如在控制器中调用:

protected $middleware = [
    'Auto' => ['except' => ['index'] ],
    'Log' => ['only' => ['index'] ],        
];
这里的Auto和Log是有顺序的,先执行Auto中间件,后执行Log中间件,就产生了前后置中间件之说。这里如果位置换一下,Log就变前置中间件了。


这里有关键字except和only,除了index方法,和只有index方法会调用中间件。

如果全部方法都要调用:

protected $middleware = [
    'Auto',
    'Log'
];

middleware.php文件说明

middleware.php文件类似于function.php等文件,是属于系统默认这样写的。

这里要注意到middleware.php文件的摆放位置,这个文件可以有多个,如果需要在控制器中使用就放置在控制器的同一目录,如果是全局的放置在最外面,如果是某一module的就放在这个模块下面。向上面的如果只能在index方法里面执行,那么middleware.php就必须是放在index这个控制器目录下面。不然就会出现都能调用到,only就不起作用。



关于路由注册中间件的说明

一般没有用到路由的小伙伴就不需要去了解注册到路由的中间件。

关于注册到路由的中间件,把下方的注册写入到route.php文件内:

Route::rule('hello','index/Index/hello')
	->middleware('Check');
这样访问地址:


1、http://localhost/smxl/public/index.php/hello,就等于访问了:2、http://localhost/smxl/public/index.php/index/Index/hello

在访问 1号 这个路径时会去调用Check中间件,但是直接访问 2号 地址就不会调用到Check中间件,因为这个中间件只注册在了 1号 这个路由上。



另外注意一下,官方文档有些地方没有注意大小写,比如Check中间件C必须是大写,不然会认不到。不要写成check。


个人总结所写,如果有什么错误请大家指出。


关于中间件的官方文档:https://www.kancloud.cn/manual/thinkphp5_1/564279

相关文章

thinkphp6 使用中的注意点

thinkphp6 使用中的注意点

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

Thinkphp6中在构造函数中返回json数据

return json($arr)->send();如果直接在构造函数中使用return json()是不会返回json格式的数据的。必须调用send方法。...

phpExcel 官方停止更新,不支持php7.4以上版本,改用 phpspreadsheet

composer require phpoffice/phpspreadsheet安装后:按需要引入文件use PhpOffice\PhpSpreadsheet\Spre...

最新阿里云OSS文件上传部署

1、前往阿里云github下载SDK包:https://github.com/aliyun/aliyun-oss-php-sdk/releases。 这里介绍源码部署:Source code下载下来...

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

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

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

ThinkPHP6 事件的简单应用

ThinkPHP6 事件的简单应用

一、序章ThinkPHP6的手册中关于【事件】章节的介绍都是直接文字说明,给出创建的类文件,并没有一个好的示例来进行补充说明。对于刚接触【事件】的同学在阅读理解上增加了一点点困难,本文就在此结合示例简...

发表评论    

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