# 中间件
中间可以分为,前置中间件和后置中间件,换句话理解就是在返回响应前面的中间件为前置中间件,在返回响应后面的中间件为后置中间件。如果按路由来分的话,可以分为全局中间件(每个请求都会调用),路由中间件组,排序中间件等。
# 如何使用中间件
生成中间件 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
- 跨域中间件
- 限流中间件(限流的目的主要是为了安全和资源控制,节省消耗)