미들웨어 장인이 명령 : 새로운 미들웨어를 만들려면 메이크업을 사용할 수 있습니다 :
![](http://upload-images.jianshu.io/upload_images/15707376-314203b3b859e261.png?imageMogr2/auto-orient/strip|imageView2/2/w/694/format/webp)
이 명령은 응용 프로그램 / HTTP / 미들웨어 디렉토리에 CheckAge 클래스의 이름을 설정합니다. 이러한면에서 우리는, 연령 변수는 경로를 액세스하기 위해 200보다 큰 미들웨어 나이 요청, 그렇지 않으면, 우리는 홈 "홈"이 URI에 사용자를 리디렉션 할 수 있습니다.
![](http://upload-images.jianshu.io/upload_images/15707376-77159809bf07807c.png?imageMogr2/auto-orient/strip|imageView2/2/w/947/format/webp)
당신이 볼 수 있듯이 나이가 200보다 작 으면, 미들웨어는 HTTP 그렇지 않으면, 요청이 더 응용 프로그램에 전달되며, 클라이언트로 리디렉션 돌아갑니다. 다음 단지 $ $으로 요청과 메소드를 호출하고 (미들웨어있게 대응하는) 깊이로 어플리케이션 요청을 전달한다.
HTTP 요청 전에 애플리케이션에 실제 접촉하기 위해, 각 층은 바람직 미들웨어 사이로. 각 층은 요청을 검사, 또는 상기 요청을 거부 할 수있다.
각 HTTP 요청이 미들웨어를 통과하려면, $ 미들웨어 속성 재고 목록은 미들웨어 클래스는 응용 프로그램 / HTTP / Kernel.php에 추가 한한다.
특정 경로 미들웨어에 할당 할 경우, 당신은 기본적으로 우호적 인 결합을 설정하는 응용 프로그램 / HTTP / Kernel.php 미들웨어에 있어야,이 파일의 중간에 $ routeMiddleware 속성은 이미 Laravel의 현재 세트가 포함되어 있습니다 조각, 당신은 단지 키 세트는 인벤토리 목록에서 사용자 정의 할 수 있습니다 추가해야합니다.
![](http://upload-images.jianshu.io/upload_images/15707376-9d65e0deecbb7f37.png?imageMogr2/auto-orient/strip|imageView2/2/w/945/format/webp)
미들웨어는 HTTP 커널 파일에 정의 된 후에는 라우팅 옵션에서 미들웨어 키의 사용을 지정할 수 있습니다 :
![](http://upload-images.jianshu.io/upload_images/15707376-1ff6d4896f6ec175.png?imageMogr2/auto-orient/strip|imageView2/2/w/943/format/webp)
여러 미들웨어 경로를 지정합니다 :
![](http://upload-images.jianshu.io/upload_images/15707376-15e4d3a810e8d32f.png?imageMogr2/auto-orient/strip|imageView2/2/w/942/format/webp)
당신은 경로 할당 된 미들웨어로 전체 클래스 이름을 사용할 수 있습니다.
![](http://upload-images.jianshu.io/upload_images/15707376-564ce4f27ea93ede.png?imageMogr2/auto-orient/strip|imageView2/2/w/940/format/webp)
미들웨어 그룹 #
때때로 당신은 쉽게 $ middlewareGroups의 HTTP 커널을 사용하여 얻을 수있는 경로에 할당하고, 내부의 관련 미들웨어의 그룹에 할당됩니다 키 이름을 지정하여 방법을 할 수 있습니다.
Laravel 自带了开箱即用的web和api两个中间件组以包含可以应用到 Web UI 和 API 路由的通用中间件:
![](http://upload-images.jianshu.io/upload_images/15707376-cf5f62240009efd2.png?imageMogr2/auto-orient/strip|imageView2/2/w/947/format/webp)
中间件组可以被分配给路由和控制器动作,使用和单个中间件分配同样的语法。再次申明,中间件组的目的只是让一次分配给路由多个中间件的实现更加简单:
![](http://upload-images.jianshu.io/upload_images/15707376-d2c98419e1d0501f.png?imageMogr2/auto-orient/strip|imageView2/2/w/943/format/webp)
例子:
创建中间件
php artisan make:middleware AdminMiddleware
中间件编写登录验证
public function handle($request, Closure $next) { if( !session()->get('userInfo') ){ return redirect('admin/login'); } return $next($request); }
注册中间件 (Kernel.php)
protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, \Illuminate\Session\Middleware\StartSession::class, ], 'api' => [ 'throttle:60,1', 'bindings', ], ];
使用:
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\BaseController; use Illuminate\Http\Request; //use DB; use Illuminate\Support\Facades\DB; use App\Model\admin; class IndexController extends BaseController { public function __construct(){ $this->middleware('admin.auth')->except(['login','signin']); }
}