什么是中间件中间件顾名思义是指在请求和响应中间,进行请求数据的拦截处理,数据校验,并且进行逻辑处理后判断是否允许进入下一个中间件。中间件分为前缀中间件,后置中间件。可以用于权限认证。日志记录等

图样图片源至koa的官方图

Laravel中间件

生成中间件类首先通过Laravel自带的artisan 命令生成一个中间件php artisan make:middleware TestMiddleware

这个命令是在Laravel项目的app/Http/Middleware目录下创建TestMiddleware类。

进行我们中间件的请求校验。如果请求参数不合法我们进行重定向。

<?php

namespace App\Http\Middleware;

use Closure;

class TestMiddleware

{

/**

* Handle an incoming request.

*

* @param \Illuminate\Http\Request $request

* @param \Closure $next

* @return mixed

*/

public function handle($request, Closure $next)

{

if($request->input('token') === 'engkan'){ //判断请求token是否合法

return $next($request);

}

return redirect('/');

}

}

注册中间件在Laravel5.6版本里,有三种中间件类型。全局中间件,中间件组,路由中间件

下面我们注册路由中间件做测试,配置Laravel项目的app/Http目录下的Kernel.php类文件,在$routeMiddleware上添加我们注册我们刚刚的中间件/**

* The application's route middleware.

*

* These middleware may be assigned to groups or used individually.

*

* @var array

*/

protected $routeMiddleware = [

'auth' => \Illuminate\Auth\Middleware\Authenticate::class,

'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,

'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,

'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,

'can' => \Illuminate\Auth\Middleware\Authorize::class,

'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,

'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,

'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,

'test' => Middleware\TestMiddleware::class

];

现在我们可以在路由使用我们我们刚刚注册的中间件了,进入Laravel项目的routes目录下的web.php去添加我们的中间件查看是否生效<?php

/*

|--------------------------------------------------------------------------

| Web Routes

|--------------------------------------------------------------------------

|

| Here is where you can register web routes for your application. These

| routes are loaded by the RouteServiceProvider within a group which

| contains the "web" middleware group. Now create something great!

|

*/

Route::get('/', function () {

return view('welcome');

});

Route::get('/test', function () {

return 'test';

})->middleware('test');

查看效果现在我们开启laravel服务打开浏览器查看效果php artisan serve

打开不带token页面 http://127.0.0.1:8000/test

打开带token的页面 http://127.0.0.1:8000/test?token=engkan

发现不带token的页面被重定向了,果不其然发现和我们想的一样。现在我们大概对中间件有了一定认识,当然Laravel的中间件不止是这些。

实现一个简单的中间件

本文由 潘文伟 创作,采用 知识共享署名4.0 国际许可协议进行许可

本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名

最后编辑时间为: Sep 14, 2018 at 02:14 pm

php中间件,php中间件 (middleware)相关推荐

  1. web中间件_HTTP中间件机制实现与原理 - 从零开始写GO-API框架

    大家好,很高兴您能阅读这篇文章. 最近在投稿公众号时发现从未做过自我介绍,首先请允许我介绍一下自己. 我叫张晓亮,就职于新浪微博,Golang的忠实粉丝,平时的爱好看看书.撸撸码,典型的程序员性格,最 ...

  2. {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证...

    Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学会了 ...

  3. 什么是中间件,中间件有什么作用

    什么是中间件,中间件有什么作用 文/花纯春 @ http://blog.csdn.net/metababy   平时是埋头写代码,不闻窗外事,对盛传于世的"中间件",也只是停留在听 ...

  4. 什么是中间件?中间件的作用,怎么使用中间件及应用场景

    什么是中间件?中间件的作用,怎么使用中间件及应用场景 如果你想修改请求,例如被传送到view中的HttpRequest对象. 或者你想修改view返回的HttpResponse对象,这些都可以通过中间 ...

  5. 什么是中间件,中间件是什么意思?

    经常听人提起"中间件"这个名词,什么是中间件,中间件是什么意思呢?中间件是指的架构吗? 中间件(Middleware)通常是指在一个大型分布式的系统中,负责各个不同组件(Compo ...

  6. linux运维中的中间件,linux中间件Nginx的安装过程

    下面一步一步走进中间件"Nginx"中间件的安装过程中 第一步下载nginx件,本站不提供下载哈,各位看官根据自己linux的版本号下载相对应的nginx中间件.,本站以<n ...

  7. js reduce实现中间件_Laravel中间件实现原理及实例分析

    Laravel中间件实现原理详解 本文实例讲述了Laravel的中间件实现原理.分享给大家供大家参考,具体如下: #1 什么是中间件? 对于一个Web应用来说,在一个请求真正处理前,我们可能会对请求做 ...

  8. django中间件及中间件实现的登录验证

    1.定义 一个用来处理Django的请求和响应的框架级别的钩子(函数),相对比较轻量级,并且在全局上改变django的输入与输出(使用需谨慎,否则影响性能) 直白的说中间件就是帮助我们在视图函数执行之 ...

  9. koa2 mysql 中间件_Koa2——中间件

    1.什么是koa2中间件? koa对网络请求采用了中间件的形式处理,中间件可以介入请求和相应的处理,是一个轻量级的模块,每个中间负责完成某个特定的功能.中间件的通过next函数联系,执行next()后 ...

最新文章

  1. python pdb 基础调试
  2. C++类对象在内存中的布局
  3. phpvirtualbox+Virtualbox完整虚拟化环境部署
  4. HALCON示例程序measure_grid.hdev使用XLD分割键盘轮廓
  5. Acwing 1081. 度的数量(以及本人对数位dp的浅薄理解)
  6. DNN使用非80端口和总是跳转到http://localhost问题的解决
  7. PCB布局,布线技巧总结
  8. mysql无损复制_MySQL无损复制(转)
  9. C/C++ 实现文件透明加解密
  10. qq空间html倒计时,空间倒计时flash代码,有图
  11. python 10的次方_python e次方
  12. Jmeter的元件使用介绍:取样器详解
  13. 如何解决 Elasticsearch 中未分配的分片
  14. git memery 后 push到远程,如何回滚
  15. 服务器安装系统提示加载驱动程序,解决安装win7的提示“加载驱动程序”的问题...
  16. 2021中国薪酬指南:全球半数雇主计划加薪并恢复至正常招聘水平
  17. Android中Assets文件路径
  18. 商业模式笔记以及体悟
  19. 洛谷P2738 [USACO4.1]篱笆回路Fence Loops(Floyed求最小环)
  20. 组图:1936年柏林奥运会

热门文章

  1. tar 解压出指定文件到指定目录
  2. 如何制作一个横版格斗过关游戏(一) Cocos2d-x 2.0.4
  3. Oracle不让小数四舍五入,Oracle特殊情况下数字四舍五入问题
  4. 【python】代码实现计算天数倒计时
  5. iOS快速集成支付宝(完善版)
  6. Laya 多国家语言功能开发
  7. python数据分析与挖掘实践大作业_数据挖掘大作业最终报告.PDF
  8. js垃圾回收机制详解
  9. Jquery.on() 与 .blur() 详解
  10. 中缀表达式转后缀表达式【转换步骤】