先谈一谈中间件的使用场景,好比路由转到一张页面,咱们须要记录用户的cookie,或者检测用户的访问权限,这些操做若是全写在控制器里是不合适的,由于随着业务的扩充,控制器里的业务逻辑会愈来愈臃肿,难以维护,因此,不一样的操做,咱们分别写在各自的中间件里。咱们使用artisan命令行来建立一个中间件。php
php artisan make:middleware MyMiddleware
中间件的php文件都放在了目录\app\Http\Middleware下,你们应该注意到,中间件Middleware和控制器Controller文件夹都在Http文件夹下。数组
<?php namespace App\Http\Middleware; use Closure; class MyMiddleware { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { return $next($request); } }
这里咱们只改动handle函数来举例中间件的使用bash
public function handle($request, Closure $next) { echo 'MyMiddleware is running!'; return $next($request); }
中间件不注册是不能使用的。注册方式有如下两种,取其一便可。cookie
第一种,Kernel.php的$middleware数组中注册,这种注册后,全部的HTTP请求都将能够启动这个中间件,特别适合用在身份认证类的功能上。app
protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \App\Http\Middleware\MyMiddleware::class, ];
第二种,Kernel.php的$routeMiddleware数组中注册,这种注册方式适用于部分指定页面才能够启动这个中间件。函数
protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'mymiddleware'=>\App\Http\Middleware\MyMiddleware::class, ];
请注意,注册中间件,不是等于启动中间件,注册仅仅是让你能用而已,可是具体调用仍是要另外写的。this
若是你的View有对应的Controller,就直接在Controller里写。spa
class MyController extends Controller { public function index() { $this->middleware('MyMiddleware'); //你也能够继续使用其余中间件 return View('welcome'); } }
若是路由里直接绑定了一个匿名函数,能够修改routes.php命令行
Route::get('/index',['middleware'=>'mymiddleware',function(){ return 'hello world'; }]);