# 官方文档:
https://www.kancloud.cn/manual/thinkphp5_1/564279
# 输入命令生成中间件
~~~
php think make:middleware Check
~~~
![](https://img.kancloud.cn/ef/fb/effbcb3156bc9912f1d980ea1860dc0e_2096x985.png)
![](https://img.kancloud.cn/b8/ac/b8ac67b81c36d11ba26be1ec9b6a910c_2319x944.png)
# 注册中间件:
# 在application里新键一个`middleware.php`文件
## 代码:
~~~
<?php
return[
app\http\middleware\Check::class //注册中间件 到应用目录
];
~~~
## 一般用于登陆的时候,如果哪个路由需要就单独设置哪个路由
![](https://img.kancloud.cn/b6/c8/b6c8d5d6a7d8604003b8ace1480802b8_1009x294.png)
![](https://img.kancloud.cn/d1/24/d124ab3406cc4f99a45a97a2a8a9f7d6_2579x1169.png)
## 中间件里返回对象包(一个完整的中间件框架就是以下图片所展示代码)
![](https://img.kancloud.cn/1e/92/1e92b3a6a8ce88a51f44790729590b43_3007x1164.png)
~~~
<?php
namespace app\http\middleware;
class Check
{
public function handle($request, \Closure $next) //入口 这里一般不要改变触发改源代码 \Closure 为匿名函数
{
echo '123';
return $next($request); //返回request闭包 固定格式写到这里
}
}
~~~
# 中间件里的$request可以拦截所有来自路由的参数 进行判断或者处理
![](https://img.kancloud.cn/03/5d/035d3b60c8087745969707146c653fd2_2912x1498.png)
# 代码案例:
~~~
<?php
namespace app\http\middleware;
use think\Request;
class Check
{
public function handle(Request $request, \Closure $next) //入口 这里一般不要改变触发改源代码 \Closure 为匿名函数
{
//这个区域做逻辑判断,判断跳转到哪里或者怎么样
if($request->param('id')==100){
return redirect('/index');
}elseif($request->param('id')==500){
return redirect('/es');
}
//这个区域做逻辑判断,判断跳转到哪里或者怎么样
return $next($request); //返回request闭包 固定格式写到这里
}
}
~~~
# 路由里的参数:
![](https://img.kancloud.cn/83/41/83414e684ef4c5b9bce980b028d3337d_1789x756.png)
~~~
<?php
Route::get('index/[:id]','index/index/index'); //传入值
Route::get('es','index/index/es');
~~~
# 注意:
## 中间件的入口执行方法必须是`handle`方法,而且第一个参数是`Request`对象,第二个参数是一个闭包。
# 路由中注册:
## 注册中间件
### 路由中间件
## 最常用的中间件注册方式是注册路由中间件
~~~
Route::rule('hello/:name','hello')
->middleware('Auth');
~~~
## 或者使用完整的中间件类名
~~~
Route::rule('hello/:name','hello')
->middleware(app\http\middleware\Auth::class);
~~~
## 支持注册多个中间件
~~~
Route::rule('hello/:name','hello')
->middleware(['Auth', 'Check']);
~~~
## `V5.1.7+`版本,你可以直接在应用配置目录下的`middleware.php`中先预定义中间件(其实就是增加别名标识),例如:
##
~~~
return [
'auth' => app\http\middleware\Auth::class,
'check' => app\http\middleware\Check::class
];
~~~
## 然后直接在路由中使用中间件别名注册
~~~
Route::rule('hello/:name','hello')
->middleware(['auth', 'check']);
~~~
## `V5.1.8+`版本开始,可以支持使用别名定义一组中间件,例如:
~~~
return [
'check' => [
app\http\middleware\Auth::class,
app\http\middleware\Check::class
],
];
~~~
## 然后,直接使用下面的方式注册中间件
~~~
Route::rule('hello/:name','hello')
->middleware('check');
~~~
## 支持对路由分组注册中间件
~~~
Route::group('hello', function(){
Route::rule('hello/:name','hello');
})->middleware('Auth');
~~~
## `V5.1.8+`版本开始支持对某个域名注册中间件
~~~
Route::domain('admin', function(){
// 注册域名下的路由规则
})->middleware('Auth');
~~~
如果需要传入额外参数给中间件,可以使用
~~~
Route::rule('hello/:name','hello')
->middleware('Auth:admin');
~~~
如果使用的是常量方式定义,可以在第二个参数传入中间件参数。
~~~
Route::rule('hello/:name','hello')
->middleware(Auth::class, 'admin');
~~~
如果需要定义多个中间件,使用数组方式
~~~
Route::rule('hello/:name','hello')
->middleware([Auth::class, 'Check']);
~~~
可以统一传入同一个额外参数
~~~
Route::rule('hello/:name','hello')
->middleware([Auth::class, 'Check'], 'admin');
~~~
复制
或者单独指定中间件参数。
~~~
Route::rule('hello/:name','hello')
->middleware(['Auth:admin', 'Check:editor']);
~~~
- 文件作用与框架文件说明
- 助手函数
- 系统常量(常用与自定义)
- 自定义配置文件extra(文件夹)
- 自定义配置文件.Env
- 路由pathinof 方式
- 路由强制模式(主要用这个)
- 路由的请求方法几种常用
- 路由参数规则设置
- 路由分组闭包与MISS路由
- 资源路由
- 请求Request和参数过滤
- session和cookie的配置及获取
- 判断路由请求类型及Request注册方法
- 响应数据方法create
- json xml jsonp助手函数
- 改命名空间(改成自定义的)
- (controller里常用的方法)success与error重定向的使用nignx重写的配置
- _initialize构造函数
- beforeAction前置操作使用
- 空路由与多级控制器使用
- 连接数据库操作(ORM)
- 助手函数db()
- 插入数据库操作(ORM)
- 查询数据库操作(ORM)
- (链式语法)where条件查询数据库(ORM)
- (链式语法)只查询某个字段或者排除某个字段链式操作field(ORM)
- (链式语法)排序查询order(ORM)
- (链式语法)查询条数limit(ORM)
- (链式语法)查询多条重复数据只返回一个distinct方法查询(ORM)
- (链式语法)获取mysql语句fetchSql(ORM)
- (链式语法)查询改表名输出alias(ORM)
- 连表查询join() (ORM)
- 数据库事务监听(ORM)
- (改数据)更新数据库(ORM)
- (改数据)更新数据库之自增与自减(ORM)
- 链式操作语法(ORM)
- (删除数据)删除数据(ORM)
- model模型创建方法
- (增)插入数据(Model)
- (查)查询数据(Model)
- 关于类 (杂项整理)
- (查)动态查询数据(Model)
- (改)更新数据库(Model)
- (删)删除数据(Model)
- 数据表时间戳(Model)
- view视图创建与渲染模板
- view视图输出与调用
- view输出常量与Session 与Cookie值
- view输出函数以及过滤
- view视图循环输出与if判断
- view各项配置以及修改(自定义资源路径)
- view各项配置以及修改(修改模板起始符)
- view 模板引入和自定义配置
- view模板继承
- thinkphp 实战命令行生成模块控制器模型视图
- Validate登录验证使用方法
- Validate验证场景分离写法
- Validate令牌验证
- captcha验证码配置
- 图片以及文件上传
- 资源路由下URL语法拼接模板循环的ID
- view三元运算符
- POST下的PUT请求(安全方法)
- 路由重定向
- 常见问题解决
- config文件
- 模板里使用路由路径
- 原生PHP在thinkphp中拓展
- 公共函数文件
- 5.1与5.0区别
- 5.1路由区别
- 5.1中间件
- 5.1微信支付