laravel中间件-----------middleware
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的更多相关文章
- laravel框架的中间件middleware的详解
本篇文章给大家带来的内容是关于laravel框架的中间件middleware的详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. laravel中间件是个非常方便的东西,能将一些逻辑 ...
- (学习笔记)laravel 中间件
(学习笔记)laravel 中间件 laravel的请求在进入逻辑处理之前会通过http中间件进行处理. 也就是说http请求的逻辑是这样的: 建立中间件 首先,通过Artisan命令建立一个中间件. ...
- laravel中间件源码分析
laravel中间件源码分析 在laravel5.2中,HTTP 中间件为过滤访问你的应用的 HTTP 请求提供了一个方便的机制.在处理逻辑之前,会通过中间件,且只有通过了中间件才会继续执行逻辑代码. ...
- laravel中间件使用
1.在app/Http/Kernel.php文件中配置中间件文件,例如: protected $routeMiddleware = [ 'auth' => \Illuminate\Auth\Mi ...
- laravel中间件的创建思路分析
网上有很多解析laravel中间件的实现原理,但是不知道有没有读者在读的时候不明白,作者是怎么想到要用array_reduce函数的? 本文从自己的角度出发,模拟了如果我是作者,我是怎么实现这个中间件 ...
- ASP.NET Core 开发-中间件(Middleware)
ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组 ...
- ASP.NET Core中间件(Middleware)实现WCF SOAP服务端解析
ASP.NET Core中间件(Middleware)进阶学习实现SOAP 解析. 本篇将介绍实现ASP.NET Core SOAP服务端解析,而不是ASP.NET Core整个WCF host. 因 ...
- 二、中间件(middleware)
1. 中间件(middleware) Django中的中间件主要实现一些附加功能,在request被用户handler处理前,以及用户handler处理后生存的response进行处理.因此 ...
- 中间件(Middleware)
中间件(Middleware) ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下 ...
随机推荐
- ES6之let(理解闭包)和const命令
ES6之let(理解闭包)和const命令 最近做项目的过程中,使用到了ES6,因为之前很少接触,所以使用起来还不够熟悉.因此购买了阮一峰老师的ES6标准入门,在此感谢阮一峰老师的著作. 我们知道,E ...
- mongo&node
///// node install $ sudo apt-get install python-software-properties $ curl -sL https://deb.nodesou ...
- DRY原则
DRY--Don't Repeat Yourself Principle,直译为"不要重复自己"原则 DRY简而言之,就是不要写重复的代码.原则本身很简单,但是,对于OOAD(面向 ...
- 线性回归和批量梯度下降法python
通过学习斯坦福公开课的线性规划和梯度下降,参考他人代码自己做了测试,写了个类以后有时间再去扩展,代码注释以后再加,作业好多: import numpy as np import matplotlib. ...
- JQuery------.load()从服务器获取数据并加载到某个类的方法
注意:需要在../Content/asf.txt路径下加入文件 html <button class="Btn">按钮</button> js 参数意义: ...
- Runner站立会议03
开会时间:21.10~21.30 地点:二教103 今天做了什么:Android的存储,只是存储在/date/date 文件夹下和sd卡 明天准备做什么:学习Android的数据库的使用sqlite ...
- Flash Builder 4.7 破解
http://litech.diandian.com/post/2013-03-22/40049178994 Adobe Flash Builder 4.7 For Mac 破解 和Photoshop ...
- javascript的propertyIsEnumerable()方法使用介绍
hasOwnProperty() 方法用来判断某个对象是否含有指定的自身属性. propertyIsEnumerable()是用来检测属性是否属于某个对象的,如果检测到了,返回true,否则返回fal ...
- JS中两个重要的方法 call & apply 学习
正题: Function.prototype.apply(instance,args) //args 数组 Function.prototype.Call(instance,a1,a2) //a1 ...
- init.php 建立自己的前端共享文件
文件位置:include/init.php 1.新建文件lib_xxx.php(lib_liangxin.php) 2.在文件init.php 第74行加入代码 require(ROOT_PATH . ...