<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, "Hiragino Sans GB", "Hiragino Sans GB W3", "WenQuanYi Micro Hei", "Microsoft YaHei UI", "Microsoft YaHei", sans-serif; font-size: 14px;">当然,除了认证之外,中间件还可以被用来处理更多其它任务。比如:CORS 中间件可以用于为离开站点的响应添加合适的头(跨域);日志中间件可以记录所有进入站点的请求。</span>
Laravel框架自带了一些中间件,包括维护模式、认证、CSRF 保护中间件等等。所有的中间件都位于app/Http/Middleware
目录。
要创建一个新的中间件,可以通过 Artisan 命令 make:middleware
:
这个命令会在 app/Http/Middleware
目录下创建一个新的中间件类 OldMiddleware
。
不过我还是通过手动创建来加强理解:
1.首先,在 app/Http/Middleware 目录下创建一个我们自己的中间件,我这里创建一个名为TestMiddleware.php 的中间件,用来做测试用,输出一句hello,代码如下:
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2016/10/31 * Time: 16:28 */ namespace App\Http\Middleware; use Closure; class TestMiddleware { /** * 测试中间件 * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed * */ public function handle($request, Closure $next) { echo 'hello laravel middleware'; return $next($request); } }
2.注册中间件
全局中间件
如果你想要中间件在每一个 HTTP 请求期间被执行,只需要将相应的中间件类设置到 app/Http/Kernel.php
的数组属性 $middleware
中即可。
分配中间件到路由
如果你想要分配中间件到指定路由,首先应该在 app/Http/Kernel.php
文件中分配给该中间件一个简写的 key,默认情况下,该类的 $routeMiddleware
属性包含了 Laravel 内置的入口中间件,添加你自己的中间件只需要将其追加到后面并为其分配一个 key:
/** * The application's route middleware. * * These middleware may be assigned to groups or used individually. * * @var array */ protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'test' => \App\Http\Middleware\TestMiddleware::class ];
我这里分配的是test
3.运用到路由当中去,新建一条路由,如果要用到多个中间件,middleware 可以对应一个数组,代码如下
Route::get('Admin/test3', ['middleware'=>'test',function () { return 'Admin::test3'; }]);
4.访问下域名/Admin/test3,看看效果
其实可以把中间件当做,请求时候,多走的一层,在这一层上面可以做很多验证啊,防护啊什么的事情,走一遍大概有个了解,还有路由组什么的,就不贴出来了,文档比较详细
laravel 中间件文档地址:http://laravelacademy.org/post/2803.html