效果展示:思路:1、中间件2、路由加上中间件3、中间件里获取相关操作、ip、请求参数(转json格式入库),请求类型4、利用模型进行数据写入5、数据表设计示例代码:1、在所属模块中间件目录middleware下创建OperationL
效果展示:
思路:
1、中间件
2、路由加上中间件
3、中间件里获取相关操作、ip、请求参数(转json格式入库),请求类型
4、利用模型进行数据写入
5、数据表设计
示例代码:
1、在所属模块中间件目录middleware下创建OperationLog.php中间件,并编写如下代码
<?php
/**
*
* User: jyblogs
* Date: 2021/5/11
* Email: <2938039696@qq.com>
* 日志中间件
**/
declare (strict_types=1);
namespace app\union\middleware;
use app\union\model\Adminlist;
use app\union\model\AdminLog;
use think\facade\Cookie;
class OperationLog
{
/**
* 处理请求
*
* @param \think\Request $request
* @param \Closure $next
* @return Response
*/
public function handle($request, \Closure $next)
{
$admin_id = Cookie::get('admin_id'); //管理员id
$method = $request->method(); //请求方法比如GET POST
$path= $request->url(true); //请求url
$ip = $request->ip(); //ip
$input = $request->param(); //请求参数
if(!$request->isGet()){
self::writeLog($admin_id,$input,$path,$method,$ip);
}
return $next($request);
}
public function writeLog($admin_id,$input,$path,$method,$ip){
$admin = Adminlist::where('id',$admin_id)->find();
if($admin) {
$admin_id = $admin['id'];
$admin_name = $admin['admin_name'];
}else{
return returnJson('500','非法操作');
}
$log = new AdminLog;
$log->admin_id = $admin_id;
$log->admin_name = $admin_name;
$log->path = $path;
$log->method = $method;
$log->ip = $ip;
$log->content = json_encode($input, JSON_UNESCAPED_UNICODE);
$log->created_at = time();
$log->save();
}
}
?>
2、模型代码
<?php
namespace app\union\model;
use think\facade\Cookie;
use think\Model;
class Defendlist extends Model
{
protected $pk = 'id';
// 设置当前模型对应的完整数据表名称
protected $name = 'sys_admin_log';
}
?>
3、使用路由中间件:在路由文件下加入如下代码
<?php
->middleware([\app\union\middleware\OperationLog::class])
?>
4、附:数据表设计
CREATE TABLE `tp_sys_admin_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`admin_name` varchar(255) DEFAULT NULL COMMENT '账号',
`created_at` int(12) DEFAULT NULL COMMENT '操作时间',
`ip` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT 'ip',
`content` text COMMENT '日志',
`admin_id` int(11) DEFAULT NULL COMMENT '账号id',
`path` varchar(255) DEFAULT NULL COMMENT '操作路由',
`method` varchar(255) DEFAULT NULL COMMENT '操作方法',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='管理员操作日志表';
沃梦达教程
本文标题为:ThinkPHP6利用路由中间件记录用户操作日志
基础教程推荐
猜你喜欢
- PHP实现Redis单据锁以及防止并发重复写入 2022-10-12
- 使用PHP开发留言板功能 2023-03-13
- PHP命名空间简单用法示例 2022-12-01
- laravel ORM关联关系中的 with和whereHas用法 2023-03-02
- PHP获取MySQL执行sql语句的查询时间方法 2022-11-09
- thinkphp3.2.3框架动态切换多数据库的方法分析 2023-03-19
- laravel 解决多库下的DB::transaction()事务失效问题 2023-03-08
- PHP中的错误及其处理机制 2023-06-04
- php array分组,PHP中array数组的分组排序 2022-08-01
- 在Laravel中实现使用AJAX动态刷新部分页面 2023-03-02