[TOC]
# 中間件
## 定義中間件
```
$ php artisan make:middleware CheckAge
```
```
//前置中間件
class BeforeMiddleware
{
public function handle($request, Closure $next)
{
// Perform action
return $next($request);
}
}
// 后置中間件
class AfterMiddleware
{
public function handle($request, Closure $next)
{
$response = $next($request);
// Perform action
return $response;
}
}
```
## 注冊中間件
### 全局中間件
在`app/Http/Kernel.php`中的`$middleware`屬性中增加中間件
### 為路由分配中間件
1、在`app/Http/Kernel.php`中的`$routeMiddleware`屬性中增加中間件
```
// 分配一個或多個中間件
Route::get('/', function () {
//
})->middleware('first');
Route::get('/', function () {
//
})->middleware('first', 'second');
```
2、使用完整的類名分配路由中間件,不需要在`app/Http/Kernel.php`的`$routeMiddleware`屬性中定義
```
use App\Http\Middleware\CheckAge;
Route::get('admin/profile', function () {
//
})->middleware(CheckAge::class);
```
### 中間件分組
在`app/Http/Kernel.php`中的`$middlewareGroups`屬性中設置
```
Route::get('/', function () {
//
})->middleware('diy');
Route::group(['middleware' => ['diy']], function () {
//
});
```
### 中間件順序
使用`app/Http/Kernel.php`文件的`$middlewarePriority`屬性指定中間件優先級
## 中間件參數
通過冒號隔開中間件名稱與中間件參數,多個參數之間使用逗號分隔。
```
// 中間件獲取
public function handle($request, Closure $next, $role, $param)
{
if (! $request->user()->hasRole($role)) {
// Redirect...
}
return $next($request);
}
// 定義參數
Route::put('post/{id}', function ($id) {
//
})->middleware('role:editor,param');
```
## Terminable 中間件
[在整個請求周期快要結束的時候調用](https://learnku.com/laravel/t/10802/terminable-middleware)
```
<?php
namespace Illuminate\Session\Middleware;
use Closure;
class StartSession
{
public function handle($request, Closure $next)
{
return $next($request);
}
public function terminate($request, $response)
{
// Store the session data...
}
}
```
- 入門指南
- 安裝
- 部署
- 基礎功能
- 路由
- 中間件
- CSRF 保護
- 控制器
- 請求
- 響應
- 視圖
- URL
- Session
- 表單驗證
- 錯誤
- 日志
- 前端開發
- Blade 模板
- 本地化
- 腳手架
- 編譯資源 Mix
- 安全相關
- 用戶認證
- API 認證
- 綜合話題
- 命令行
- 廣播
- 緩存
- 集合
- 事件
- 文件存儲
- 輔助函數
- 郵件發送
- 消息通知
- 擴展包開發
- 隊列
- 任務調度
- 數據庫
- 快速入門
- 查詢構造器
- 分頁
- 數據庫遷移
- 數據填充
- Redis
- Eloquent ORM
- 快速入門
- 速查表
- Artisan
- Auth
- Blade
- Cache
- Collection
- Composer
- Config
- Container
- Cookie
- DB
- Environment
- Event
- File
- Helper
- Input
- Lang
- Log
- Model
- Pagination
- Queue
- Redirect
- Request
- Response
- Route
- SSH
- Schema
- Security
- Session
- Storage
- String
- URL
- UnitTest
- Validation
- View