# 中间件

中间可以分为,前置中间件和后置中间件,换句话理解就是在返回响应前面的中间件为前置中间件,在返回响应后面的中间件为后置中间件。如果按路由来分的话,可以分为全局中间件(每个请求都会调用),路由中间件组,排序中间件等。

# 如何使用中间件

生成中间件 TestMiddleware :

php artisan make:middleware TestMiddleware

中间件参数视情况而定,下面举例带参数的中间件

<?php

namespace App\Http\Middleware;

use Closure;

class EnsureUserHasRole
{
    /**
     * 处理传入的请求。
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string  $role
     * @return mixed
     */
    public function handle($request, Closure $next, $role)
    {
        if (! $request->user()->hasRole($role)) {
            // 重定向...
        }

        return $next($request);
    }

}

如何使用中间件呢,具体的有如下方式:

  • 路由中间件

// 路由中间件
Route::get('/', function () {
    //
})->middleware(['first', 'second']);

// 中间件组
Route::get('/', function () {
    //
})->middleware('web');

Route::middleware(['web'])->group(function () {
    //
});

  • 控制器中间件
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UsersController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth', [
            'except' => ['show', 'create', 'store', 'index'],
        ]);

        $this->middleware('guest', [
            'only' => ['create']
        ]);
    }

    .
    .
    .

}

# 常用的中间件

  • auth 中间件,最佳实践 except
  • guest 中间件,最佳实践 guest
  • 跨域中间件
  • 限流中间件(限流的目的主要是为了安全和资源控制,节省消耗)