[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