# 中间件 中间件可以在执行过程中自动运行的部件,中间件主要对http请求进行拦截处理。比如,我们可以在执行控制器方法时自动使用“中间件”完成用户登录验证操作。 [TOC] ## 创建中间件 中间件需要创建在 system/middleware 目录中,可以通过命令快速的进行创建: ``` php hd make:middleware Auth ``` 生成文件如下: ``` namespace system\middleware; class Auth { //执行中间件 public function run($next){ echo "中间件执行了"; $next(); } } ``` ## 全局中间件 全局中间件会在应用启动时自动执行,不需要人为调用系统会自动执行全局中间件。 修改配置文件 system/config/middleware.php 中的global配置段来设置中间件处理类。 #### 配置 修改配置文件 system/config/middleware.php 中的global配置段 ``` 'global' => [ \system\middleware\Boot::class, \system\middleware\Auth::class ] ``` ## 应用中间件 应用中间件不会自动执行,需要开发者自行调用。 #### 系统内置中间件 可以通过创建中间类来执行 | 中间件 | 说明 | | --- | --- | | database_query | 数据库查询操作 | | database_execute | 数据库更新/删除/插入操作 | #### 配置 修改配置文件 system/config/middleware.php 中的 web配置顶 ``` 'web' => [ 'auth'=>[ \system\middleware\Auth:class, \system\middleware\Hd:class ] ] ``` #### 执行 使用中间件服务的 web() 方法运行应用中间件 ``` Middleware::web('auth'); ``` #### 动态添加 动态添加应用中间件 ``` Middleware::add('auth',[\app\Test:class]); //各auth中间件中添加处理动作app\Test类 ``` ## 控制器中间件 控制器中间件只能在控制器访问时有效,普通路由访问时无效。 #### 配置 修改配置文件 system/config/middleware.php 中的controller配置顶 ``` 'controller' => [ 'auth'=>[\system\middleware\Auth:class] ] ``` #### 使用 在控制器的 __construct 方法或之前执行以下代码都可触发控制器中间件运行。 ``` Middleware::set('auth'); ``` 只允许指定方法运行中间件 ``` Middleware::set('auth', ['only' => ['test']]); ``` 除了某个方法外其他方法执行中间件 ``` Middleware::set('auth', ['except' => ['test']]); ``` **示例** ``` namespace app\home\controller; //初始控制器 class Index{ public function __construct(){ //中间件只在test方法中执行 Middleware::set('auth', array('only' => array('test'))); } public function index(){ echo '后盾视频'; } public function test(){ echo '后盾网'; } } ```