2019独角兽企业重金招聘Python工程师标准>>>

图片:http://stackphp.com/

如上图所示,中心的绿色区域是整个应用的核心区域。

所以,中间件就是一系列处理请求和响应的方式而不是你用程序逻辑的一部分。

Laravel 中默认使用中间件处理请求中的加密解密,以及 Cookies 和 Sessions。你也可以自定义自己所需的中间件。

写中间件

artisan make:middleware MyMiddleware

执行上面的命令,生成中间件文件:

<?php namespace App\Http\Middleware;use Closure;
use Illuminate\Contracts\Routing\Middleware;class MyMiddleware implements Middleware {/*** Handle an incoming request.** @param  \Illuminate\Http\Request  $request* @param  \Closure  $next* @return mixed*/public function handle($request, Closure $next){//}}

完善 handle 方法的内容(用请求端口来做个例子):

<?php namespace App\Http\Middleware;use Closure;
use Illuminate\Contracts\Routing\Middleware;class MyMiddleware implements Middleware {/*** Handle an incoming request.** @param  \Illuminate\Http\Request  $request* @param  \Closure  $next* @return mixed*/public function handle($request, Closure $next){// Test for an even vs. odd remote portif (($request->server->get('REMOTE_PORT') / 2) % 2 > 0){throw new \Exception("WE DON'T LIKE ODD REMOTE PORTS");}return $next($request);}}

使用中间件

Laravel 5 中有两种方法加入中间件,都是写在 App\Providers\AppServiceProvider。

默认有两个属性 $middleware$stack ,$stack 里面的中间件是每次响应都会处理,而 $middleware 中的中间件是按需处理。

一帮情况下默认的中间件如下:

protected $stack = ['App\Http\Middleware\MaintenanceMiddleware','Illuminate\Cookie\Middleware\Guard','Illuminate\Cookie\Middleware\Queue','Illuminate\Session\Middleware\Reader','Illuminate\Session\Middleware\Writer',];protected $middleware = ['auth' = 'App\Http\Middleware\AuthMiddleware','auth.basic' => 'App\Http\Middleware\BasicAuthMiddleware','csrf' => 'App\Http\Middleware\CsrfMiddleware','guest' => 'App\Http\Middleware\GuestMiddleware',];

中间件每次请求都处理:

protected $stack = ['App\Http\Middleware\MyMiddleware''App\Http\Middleware\MaintenanceMiddleware','Illuminate\Cookie\Middleware\Guard','Illuminate\Cookie\Middleware\Queue','Illuminate\Session\Middleware\Reader','Illuminate\Session\Middleware\Writer',];

中间件按需处理:

 protected $middleware = ['auth' => 'App\Http\Middleware\AuthMiddleware','auth.basic' => 'App\Http\Middleware\BasicAuthMiddleware','csrf' => 'App\Http\Middleware\CsrfMiddleware','guest' => 'App\Http\Middleware\GuestMiddleware','absurd' => 'App\Http\Middleware\MyMiddleware',];

中间件路由注释

直接写到控制器类:

/*** @Resource("foobar/photos")* @Middleware("auth")* @Middleware("absurd", except={"update"})* @Middleware("csrf", only={"index"})*/
class FoobarPhotosController
{}

写到方法:

/*** @Middleware("auth.basic")*/
public function index() {}

$this->middleware()

可以在构造函数或者方法内使用 $this->middleware() 来加载相应的中间件。

...
use Illuminate\Routing\Controller;class AwesomeController extends Controller {public function __construct(){$this->middleware('csrf');$this->middleware('auth', ['only' => 'update'])}}

routes.php 设置中间件

// Routes.php// Single route
$router->get("/awesome/sauce", "AwesomeController@sauce", ['middleware' => 'auth']);// Route group
$router->group(['middleware' => 'auth'], function() {// lots of routes that require auth middleware
});

响应之前和之后处理

应用程序响应之前和之后的中间件处理:

之前处理:

...
class BeforeMiddleware implements Middleware {public function handle($request, Closure $next){// Do Stuffreturn $next($request);}}

之后处理:

...
class AfterMiddleware implements Middleware {public function handle($request, Closure $next){$response = $next($request);// Do stuffreturn $response;}}

转载于:https://my.oschina.net/u/2444569/blog/511719

Laravel 5.0 - Middleware (中间件)相关推荐

  1. PHP中间件 middleware,Laravel框架控制器的middleware中间件用法分析

    本文实例讲述了Laravel框架控制器的middleware中间件用法.分享给大家供大家参考,具体如下: 场景:活动开始前只能访问宣传页面,开始后才可以访问其他页面: 步骤: 新建中间件, 注册中间件 ...

  2. Laravel 5.0 的新特性

    原文: http://laravel.com/docs/master/releases#laravel-5.0 译文: http://discuss.flarum.org.cn/24-laravel- ...

  3. Laravel 6.0

    Laravel 学习交流 QQ 群:375462817 本记录文档前言 Laravel 文档写的很好,只是新手看起来会有点吃力,需要结合经验和网上的文章,多读.细读才能更好的理解.多读.细读官方文档! ...

  4. laravel4.2 连接mysql_Laravel 4.2 升级 Laravel 5.0 攻略

    Laravel 4.2 升级 Laravel 5.0 攻略 https://phphub.org/topics/474 以下所指L4为laravel 4.2,L5为laravel 5.0 建议如下情况 ...

  5. ASP.NET MVC随想录——创建自定义的Middleware中间件

    经过前2篇文章的介绍,相信大家已经对OWIN和Katana有了基本的了解,那么这篇文章我将继续OWIN和Katana之旅--创建自定义的Middleware中间件. 何为Middleware中间件 M ...

  6. ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)

    在上一节(ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行)中提到ASP.NET Core WebApp 必须含有Startup类,在本节中将重点讲解Startup类以及Midd ...

  7. middlewareserver_创建自定义的Middleware中间件

    经过前2篇文章的介绍,相信大家已经对OWIN和Katana有了基本的了解,那么这篇文章我将继续OWIN和Katana之旅--创建自定义的Middleware中间件. 何为Middleware中间件 M ...

  8. 新课重磅发布-Java开发微信朋友圈PC版系统(架构2.0+分布式中间件)

    继"Java开发微信朋友圈PC版系统-架构1.0" 课程之后,debug这段时间日撸夜撸,终于赶在春节放假前给诸位带来了这一系统的架构2.0版本,特此分享给诸位进行学习,以掌握.巩 ...

  9. laravel 5.0

    1.应用场景 使用PHP5.4[因为php5.4只能最高支持laravel 5.0]快速开发/维护一个web系统 2.学习/操作 1.获取参数 get方式 [查询字符串方式:Query String] ...

最新文章

  1. kafka 在阿里云部署
  2. halcon算子盘点:Chapter 18:元组Tuple
  3. 2个网页跳来跳去_怎么写最优化的网页标题标签(Title Tag)?
  4. mongodb Install the MongoDB service
  5. iOS 动画总结----UIView动画
  6. Mybatis Plus 连表操作及分页
  7. zynq中interrupts的学习笔记(一)
  8. android 本地广播原理,本地广播原理
  9. 上班族中流行以貌取人 汉王人脸通变普及
  10. 全志r16android sdk,全志R16的android4.4.2平台點亮gc2145(evb30)版本:V1.1(分色排版)...
  11. 【HTML】3.Form表单
  12. UVM--单向通信、双向通信、多向通信和通信管道
  13. 中国历代大大小小的皇帝(2)
  14. 康奈尔大学计算机生物学是,康奈尔大学生物统计硕士介绍
  15. 九峰影业创始人_九峰百度百科
  16. Arduino 74HC595驱动数码管0-9循环显示+Proteus仿真
  17. 数据分析师是青春饭吗?年龄影响很大吗?
  18. 自动化测试 | Selenium自动化测试框架,实战遇到的坑都在这了,玩转自动化测试
  19. 移动端网页特效以及常用开发框架
  20. reading 摘录一

热门文章

  1. IPSEC的NAT兼容性
  2. Mysql5.7 ZIP 压缩包非安装版的安装方式
  3. PHP 获取页面地址参数详解整理
  4. 【TensorFlow官方文档】MNIST机器学习入门
  5. 前端模板Nunjucks简介
  6. 51nod 1575 Gcd and Lcm
  7. bzoj-2957 楼房重建
  8. PIL中分离通道发生“AttributeError: 'NoneType' object has no attribute 'bands'”
  9. 关于UITableView的Cell zhuanzai
  10. Adobe宣布Flex Builder将更名为Flash Builder