• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > Thinkphp5.1详细讲解中间件的用法

Thinkphp5.1详细讲解中间件的用法

作者:站长图库 字体:[增加 减小] 来源:互联网

站长图库向大家介绍了Thinkphp5.1,中间件的用法等相关知识,希望对您有所帮助

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了关于中间件的用法,包括了什么是前置中间件、后置中间件,还有路由中间件、全局中间件等等相关内容,下面一起来看一下,希望对大家有帮助。

Thinkphp5.1详细讲解中间件的用法

一、中间件的作用

中间件主要用于拦截或过滤应用的HTTP请求,并进行必要的业务处理。比如可以使用中间件来检查用户的请求信息里是否包含一句话木马。

行为钩子和中间件的区别:

中间件:它是对项目请求做处理,在用户访问我们的项目时,中间件就可以对于这个请求来判断用户是否有权限,或者判断用户是否存在非法访问;

行为钩子:在某一动作开始或者结束的时候会触发的方法,比如用户注册成功记录日志;

中间件是对用户请求做处理,而钩子则是对用户动作的处理,中间件相当于过滤器,钩子相当于事件,都是采用AOP思想。

二、定义中间件

首先,可以通过cmd命令行指令快速生成中间件,在项目的根目录里执行以下cmd命令:

php think make:middleware Check

这个指令会 application/http/middleware目录下面生成一个Check中间件,代码如下:

<?php namespace app\http\middleware; class Check{    public function handle($request, \Closure $next)    {        if ($request->param('name') == 'index') {            return redirect('/');//重定向到首页        }         return $next($request);//返回的是一个Response对象    }}

中间件说明:

1、中间件的入口执行方法必须是handle方法,而且第一个参数是Request对象,第二个参数是一个闭包;

2、中间件handle方法的返回值必须是一个Response对象;

3、中间件里可以直接使用Request对象,获取请求参数;

4、在某些需求下,可以使用第三个参数传入额外的参数;

public function handle($request, \Closure $next, $name){    if ($name == 'index') {        return redirect('/');//重定向到首页    }     return $next($request);}


1、前置中间件

前置中间件的意思就是,在http请求完成之前,先执行中间件的代码。

<?php namespace app\http\middleware; class Before{    public function handle($request, \Closure $next)    {        // 先执行中间件代码        return $next($request);    }}

2、后置中间件

后置中间件的意思就是,在http请求完成之后,才开始执行中间件的代码。

<?php namespace app\http\middleware; class After{    public function handle($request, \Closure $next)    {        $response = $next($request);        //后执行中间件代码        return $response;    }}


三、注册中间件

1、路由中间件

顾名思义,就是指定在某个路由下才会去调用这个中间件,即用户访问了这个路由链接,就会执行这个中间件。

//用户登录的路由Route::rule('login','index/User/login')->middleware('Auth');

或者使用完整的中间件类名:

Route::rule('login','index/User/login')->middleware(app\http\middleware\Auth::class);

说明:中间件的注册建议使用完整的类名,如果没有指定命名空间则默认使用app\http\middleware作为命名空间

同一个路由也支持注册多个中间件,只需要middleware()里用逗号隔开即可:

Route::rule('login','index/User/login')->middleware(['Auth', 'Check']);

Thinkphp5.1.8+ 版本后,支持对路由分组注册中间件,如下:

//一个名为user的路由分组Route::group('user', function(){    Route::rule('login','index/User/login');    Route::rule('register','index/User/register');})->middleware('Auth');


2、全局中间件

意思就是说,所有的(全局)http访问请求,都会自动调用这个中间件。

在application目录下创建middleware.php文件,代码如下:

<?phpreturn [    //第1个中间件    \app\http\middleware\Auth::class,    //第2个中间件(Check中间件没有指定命名空间,所以会默认使用app\http\middleware作为命名空间)    'Check',];


3、模块中间件

Thinkphp5.1.8+版本以上支持模块中间件定义,你可以直接在模块目录下面增加middleware.php文件,定义方式和全局中间件定义一样,只是只会在该模块下面生效。


4、控制器中间件

Thinkphp5.1.17+版本以上支持为控制器定义中间件。首先你的控制器需要继承系统的think\Controller类,然后在控制器中定义middleware属性,例如:

<?phpnamespace app\index\controller;use think\Controller; class Index extends Controller{     protected $middleware = ['Auth'];     public function index()    {        return 'index';    }}


5、使用闭包定义中间件

在某些简单的场合,我们不需要使用中间件类,这时候可以使用闭包定义中间件,但闭包函数必须返回Response对象实例。

Route::group('hello', function(){    Route::rule('login','index/User/login');})->middleware(function($request,\Closure $next){    if ($request->param('name') == 'index') {        return redirect('/');//重定向到首页    }        return $next($request);});


四、给中间件传入参数

1、全局中间件传参数

<?phpreturn [    [\app\http\middleware\Auth::class, '张三'],    'Check:李四',];

上面的定义表示给Auth中间件传入参数为张三,给Check中间件传入参数为李四


2、路由中间件传参数

(1)、给Auth中间件传入参数张三

Route::rule('login','index/User/login')->middleware('Auth:张三');

也可以这样写:

Route::rule('login','index/User/login')->mid
  


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ThinkPhp5.1制作微信支付以及支付后的几种状态说明
  • 你知道Thinkphp5.1让验证码在Electron-vue中怎么用?
  • Thinkphp5.1详细讲解中间件的用法
  • 如何使用thinkphp5.1的数组查询对象
  • 解决ThinkPHP5.1版本引入composer vendor扩展包的问题
  • 说说Thinkphp5.1实现邮箱验证问题
  • 详解thinkphp5.1的URL重写,伪静态设置
  • thinkphp5.1的model模型自动更新update_time字段实例讲解
  • 解决TP5.1出现A non well formed numeric value encountered的问题
  • Thinkphp5.1 + layui时间范围设置方法

相关文章

  • Phpcms V9 栏目图片调用方法
  • javascript调试之console.table()
  • 织梦dedecms文章、软件发布页添加图片展示(增加多
  • 浅谈bootstrap table分页的实现两种方式
  • Photoshop制作抽象炫光的艺术字效果
  • wordpress和phpcms该怎么选择
  • js如何获取UEditor富文本编辑器中的图片地址
  • 利用滤镜制作简单的水墨字
  • 为kindsoft编辑器替换SyntaxHighlighter代码高亮,整合
  • PHP中静态方法可以访问非静态方法吗

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • PS制作质感的立体字
    • Photoshop制作绿色风格金属立体字教程
    • 解决Laravel在composer install时出现timeout问题
    • AI绘制时尚少女插画
    • 如何使用HTML+CSS制作一个简单美观的导航栏(代码详解)
    • 解析如何进行Laravel表单验证分层设计和验证场景应用
    • 如何解决strict standards php报错问题
    • 怎么修改和重置WAMP的phpMyAdmin密码
    • Discuz论坛更换域名,详细文件修改步骤
    • ThinkPHP6通过Ucenter实现注册登录的示例代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有