博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Laravel 5.0 - Middleware (中间件)
阅读量:6201 次
发布时间:2019-06-21

本文共 2971 字,大约阅读时间需要 9 分钟。

hot3.png

image

图片:http://stackphp.com/

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

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

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

写中间件

artisan make:middleware MyMiddleware

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

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

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 Stuff        return $next($request);    }}

之后处理:

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

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

你可能感兴趣的文章
django-restframework
查看>>
Linux基础学习(7)--用户和用户组管理
查看>>
Java操作XML文件
查看>>
shell脚本编程数组
查看>>
WordPress Gravatar国内加载缓慢解决办法
查看>>
扩展欧几里德算法及其应用
查看>>
linux OS一些基本概念
查看>>
在Android java代码中如何改变文件的权限
查看>>
MySQL 5.7 弱密码限制
查看>>
spring4.0学习笔记(一)
查看>>
CakeDC(cakephp company)Git workflow--适合于较大团队大型项目开发
查看>>
Mysql主从配置+读写分离(转)
查看>>
PowerMockito使用详解(转)
查看>>
find: paths must precede expression(转)
查看>>
Oracle在linux下的开机自启动(详细)转
查看>>
第1章:Maven概述/1.1 Maven的概念
查看>>
asp.net core 上使用redis探索(3)--redis示例demo
查看>>
HTTP权威指南(读书笔记一)
查看>>
[PHP]算法-替换空格的PHP实现
查看>>
WingIDE 下载,介绍和配置
查看>>