一、前言
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;
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);
}
}