middleware中间件

是访问到达服务器后在被对应的路由处理之前所经过的一层过滤层,故称中间件。

中间件是存放在app\http\middleware中,需要定一个 handle 处理方法,在handle中当处理完后,可以进行重定向,也可以使用 $next() 闭包函数执行之前的业务逻辑操作

第一步 使用artisan生成中间件

php artisan make:middleware testMiddleware

生成app\http\middleware\testMiddleware.php中间件

<?php

namespace App\Http\Middleware;

use Closure;

class testMiddleware
{
  中间件默认包含两个参数包含请求信息的$request和闭包函数$next
  $next可以继续执行之前的逻辑操作
  $request包含请求的信息
public function handle($request, Closure $next)
{
// 处理请求
    
//执行业务操作
return $next($request);
}
}

中间件可以加入其他参数

<?php

namespace App\Http\Middleware;

use Closure;

class RoleMiddleware
{
public function handle($request, Closure $next, $parameter)
{
    当age大于18时将参数写入文本
if($request -> input('age') > 18)
{
  file_put_contents('testMiddlewareHandle.txt', $parameter);
  }
  return $next($request);
  }
}

其他中间件参数需要使用 : 来分割  多个参数应当用逗号隔开

Route::get('testMiddleware/{id}', ['middleware' => 'TestMiddleware:this is MiddlewareValue', 
function($id){
file_put_contents('testRoute.txt', $id);
}]);
当访问testMiddle时会经过中间件TestMiddlewarephp中的handle函数处理,函数中的$parameter被赋值
'this is MiddlewareValue'

除了middleware属性指定中间件,也可使用middleware链式指定中间件

Route::get('/', ['middleware' => ['first', 'second'], function () {
//
}]);
链式方法
Route::get('/', function () {
//
}])->middleware(['first', 'second']);

当访问http://localhost/testMiddleware/Route?age=19,public目录下会生成两个文件分别为testRoute.txt和testMiddlewareHandle.txt

第二步 注册中间件

设计好中间件后需要注册中间件,可以在 app\http\kernel.php 中注册全局的中间件$middleware

protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    
];

也可以注册局部路由中间件

protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'test' => \App\Http\Middleware\TestMiddleware::class,
];

中间件处理顺序及可终止中间件

对于一个请求,需要中间件进行其他的操作和对其处理,可以在操作之前或者之后进行处理

可以在$next()之前或者之后进行处理业务逻辑也可以 redirect() -> route('route')进行重定向
public function handle($request, Closure $next)
{ if (condition) {
// 执行动作
} $response = $next($request);
请求处理 if (condition) {
// 执行动作
} return $response;
}

可终止中间件

可以终止中间件是在相应已经结束之后进行的操作,加上一个 terminate 方法,

terminate方法含有两个参数:$request $response,  当使用可终止中间件需要将其注册进$middleware中

    protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\TestMiddleware::class,
];
<?php

namespace App\Http\Middleware;

use Closure;

class RoleMiddleware
{
public function handle($request, Closure $next)
{
....
  return $next($request);
  } public function terminate($request, $response)
{
file_put_contents("resuest.txt", $request);
file_put_contents("response.txt", $response);
} }
对于任何的请求都会执行terminat方法,也不要指定路由的中间层为 全局中间层 不然会报错 class not exist

laravel中间件-----------middleware的更多相关文章

  1. laravel框架的中间件middleware的详解

    本篇文章给大家带来的内容是关于laravel框架的中间件middleware的详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. laravel中间件是个非常方便的东西,能将一些逻辑 ...

  2. (学习笔记)laravel 中间件

    (学习笔记)laravel 中间件 laravel的请求在进入逻辑处理之前会通过http中间件进行处理. 也就是说http请求的逻辑是这样的: 建立中间件 首先,通过Artisan命令建立一个中间件. ...

  3. laravel中间件源码分析

    laravel中间件源码分析 在laravel5.2中,HTTP 中间件为过滤访问你的应用的 HTTP 请求提供了一个方便的机制.在处理逻辑之前,会通过中间件,且只有通过了中间件才会继续执行逻辑代码. ...

  4. laravel中间件使用

    1.在app/Http/Kernel.php文件中配置中间件文件,例如: protected $routeMiddleware = [ 'auth' => \Illuminate\Auth\Mi ...

  5. laravel中间件的创建思路分析

    网上有很多解析laravel中间件的实现原理,但是不知道有没有读者在读的时候不明白,作者是怎么想到要用array_reduce函数的? 本文从自己的角度出发,模拟了如果我是作者,我是怎么实现这个中间件 ...

  6. ASP.NET Core 开发-中间件(Middleware)

    ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组 ...

  7. ASP.NET Core中间件(Middleware)实现WCF SOAP服务端解析

    ASP.NET Core中间件(Middleware)进阶学习实现SOAP 解析. 本篇将介绍实现ASP.NET Core SOAP服务端解析,而不是ASP.NET Core整个WCF host. 因 ...

  8. 二、中间件(middleware)

    1.      中间件(middleware) Django中的中间件主要实现一些附加功能,在request被用户handler处理前,以及用户handler处理后生存的response进行处理.因此 ...

  9. 中间件(Middleware)

    中间件(Middleware) ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下 ...

随机推荐

  1. oneM2M启动Release 3标准化,华为引领物联网技术布局

    http://developer.huawei.com/cn/ict/news/cn/2016/06/onem2m [韩国,首尔,2016年6月] 国际权威的物联网组织oneM2M召开第23次技术全会 ...

  2. 写Action的三种方法

    Action类似于servlet,在用户对浏览器输入url访问的时候充当控制器的角色.它在访问时产生,执行execute()之后就销毁了. 写Action是代理事务,它实现的三种方式是: (1)POJ ...

  3. Git版本控制软件结合GitHub从入门到精通常用命令学习手册(转)

    简要参考:http://www.tuicool.com/articles/mEvaq2 http://gitref.org/zh/index.html GIT 学习手册简介 本站为 Git 学习参考手 ...

  4. 解惑好文:移动端H5页面高清多屏适配方案 (转)

    转自:http://mobile.51cto.com/web-484304.htm https://github.com/amfe/lib-flexible/blob/master/src/makeg ...

  5. ecshop网站搬家缓存无法更新

    问题描述: 1.后台产品列表能改,数据也能看到,前端就是不显示 2.缓存无法删除 3.网上其他方法都试过,还是不行 症状:是因为缓存无法删除,无法更新,只需要能重新更新缓存文件即可.网站搬家丢失tem ...

  6. ecshop 配送方式支持"货到付款"

    ecshop配送方式,支持货到付款方法. 打开表 ecs_shipping,找到字段support_cod,修改1则支持货到付款 扩展 问题描述:已经修改了ecs_shipping表里的support ...

  7. php 下载文件的函数

    通过函数完成下载文件的PHP功能代码 function download($url, $filename) { // 获得文件大小, 防止超过2G的文件, 用sprintf来读 $filesize = ...

  8. 一个label里有个链接,点这个特别颜色的一些字,会执行一些操作

    这个label在sb中或者纯代码创建的时候要是TTTAttributedLabel 然后进行相关设置

  9. IIS7/IIS7.5中目录执行权限的设置方法

    我们在建站的时候,通常有些目录必须给写入权限,这个时候这些目录就很可能被人写入脚本文件,为了将安全性维护得更好,我们可以关闭这些有写入权限的目录的脚本执行权限.IIS6的时候,我们很容易找到关闭的地方 ...

  10. mvn filter autoconfig 产生自动配置

    可以使用filter, 也可以使用autoconfig 详细请见 http://www.openwebx.org/docs/autoconfig.html