ThinkPHP 6 事件的基本使用

一、前言

TP 6 文档很简洁,很多内容都没有给出一个完整的例子,事件 这块内容亦是如此,感觉对新手不是很友好。

二、博客浏览量的例子

(一)前期准备:
1. 定义路由
Route::get('blogs/:id','Blogs/read');
2. 创建控制器

使用命令

php think make:controller Blogs
3. 创建模型

使用命令

php think make:model Blog
4. 创建 think_blog 表
CREATE TABLE `think_blog` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `content` varchar(255) NOT NULL,
  `views` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;

表如下所示:
ThinkPHP 6 事件的基本使用_第1张图片

5. 模型和控制器的代码

Blogs 控制器,引入 Blog 模型类和定义了 read 方法:

isEmpty()){
            return JsonResponseHandler::error('博客不存在');
        }
        $data = [
            'title'   => $blog->title,
            'content' => $blog->content,
            'views'   => $blog->views
        ];
        return JsonResponseHandler::succ('查询成功',$data);
    }
}

Blog 模型代码:

(二)事件
1. 定义事件

使用命令行

php think make:event BlogView

默认会生成一个 app\event\BlogView 事件类,修改该类,代码如下:

blog = $blog;
    }
}
2. 绑定事件
在应用的 event.php 事件定义文件中批量绑定。

event.php 文件在 app 目录下,绑定事件的代码如下:

 [
        'BlogView' => 'app\event\BlogView',
    ],

    'listen'    => [
        'AppInit'  => [],
        'HttpRun'  => [],
        'HttpEnd'  => [],
        'LogLevel' => [],
        'LogWrite' => [],
    ],

    'subscribe' => [
    ],
];
3. 事件监听

使用命令行生成事件监听类:

php think make:listener BlogView

定义事件监听处理

blog;
        $id = $blog->id;
        $views = $blog->views;
        $blog::update(['views'=>$views+1],['id'=>$id]);
    }
}
4. 绑定监听

在之前提到的 event.php 文件中进行绑定,具体代码如下:

 [
        'BlogView' => 'app\event\BlogView',
    ],

    'listen'    => [
        'AppInit'  => [],
        'HttpRun'  => [],
        'HttpEnd'  => [],
        'LogLevel' => [],
        'LogWrite' => [],
        // 绑定监听
        'BlogView' => ['app\listener\BlogView'],
    ],

    'subscribe' => [
    ],
];
5. 触发事件

当用户浏览博客的时候,浏览量加一,所以触发时机应该定义在 Blogs 控制器中的 read 方法,注意读注释:

isEmpty()){
            return JsonResponseHandler::error('博客不存在');
        }
        // 触发事件
        event(new BlogView($blog));
        $data = [
            'title'   => $blog->title,
            'content' => $blog->content,
            'views'   => $blog->views
        ];
        return JsonResponseHandler::succ('查询成功',$data);
    }
}
6. 测试

查询前 id 为 3 的文章的浏览数为零
ThinkPHP 6 事件的基本使用_第2张图片
查询
ThinkPHP 6 事件的基本使用_第3张图片
查询后
database-demo.png

参考资料

  1. TP6 文档-事件

你可能感兴趣的:(phpthinkphp6事件)