php 一个简单的后台操作日志封装

SystemLogModel.php 为系统日志类,LogModel.php 为业务日志类。有一个全局自动根据路由写入日志(入参和响应等内容)的话更好。

<?phpnamespace common\models\common;use backend\helpers\AdminHelper;
use common\helpers\MessageHelper;
use common\models\BaseModel;class SystemLogModel extends BaseModel
{const MODULE_USER = '用户';const MODULE_ROLE = '角色';const MODULE_MENU = '菜单';const MODULE_CONFIG = '配置';const MODULE_QUEUE = '队列';const MODULE_PUSH = '推送';const MODULE_SUBJECT_MENU = '菜单';const ACTION_LOGIN = '登录';const ACTION_LOGOUT = '登出';const ACTION_NEW = '新增';const MODULE_OPTIONS = [self::MODULE_USER,self::MODULE_ROLE,self::MODULE_MENU,self::MODULE_QUEUE,self::MODULE_CONFIG,];const ACTION_OPTIONS = [self::ACTION_LOGIN,self::ACTION_LOGOUT,self::ACTION_NEW,self::ACTION_EDIT,self::ACTION_DELETE,self::ACTION_UPDATE_STATUS,self::ACTION_RE_PUSH,self::ACTION_MARK_COMPLETED,];public static function tableName(){return 'xxx_log';}public static function log($module, $action, $data){try {unset($data['password']);unset($data['confirm_password']);$log = new static();$log->module = $module;$log->data = json_encode($data, JSON_FLAG);$log->item_id = $data['item_id'] ?? '';if (empty($log->item_id)) {$log->item_id = $data['id'] ?? '';}$log->action = $action;$log->username = AdminHelper::getSessionData('username');if (empty($log->username)) {$log->username = 'console';}$log->real_name = AdminHelper::getSessionData('real_name');if (empty($log->real_name)) {$log->real_name = '系统自动';}$log->save(false);} catch (\Throwable $e) {MessageHelper::send('保存后台日志异常:'.$e->getMessage().$e->getTraceAsString().',参数:'.json_encode([$module, $action, $data], JSON_FLAG));}}
}```php
<?phpnamespace common\models\common;class LogModel extends SystemLogModel
{const MODULE_GOODS = '商品';const MODULE_PRIZE_ITEM = '奖品';const MODULE_ADMIN = '后台';const MODULE_INTEGRAL = '积分商品活动';const MODULE_DAYS_PRICE = '每日价格';const MODULE_ONLINE_CATE = '线上商品分类';const MODULE_OPTIONS = [self::MODULE_GOODS,self::MODULE_PROMOTION,self::MODULE_COUPON,self::MODULE_GOODS_LISTING,self::MODULE_CHANNEL,self::MODULE_BRAND,self::MODULE_COUNTER,self::MODULE_CLIENT,self::MODULE_ADMIN,self::MODULE_PRIZE,self::MODULE_PRIZE_ITEM,self::MODULE_ASSISTANCE];const ACTION_INVALID = '作废';const ACTION_GIFT = '赠送';const ACTION_STOCK_RESTORE = '库存修复';const ACTION_ADD_CLIENT_CODES = '批量新增渠道';const ACTION_OPTIONS = [self::ACTION_NEW,self::ACTION_EDIT,self::ACTION_DISABLED,self::ACTION_UPDATE_STATUS,self::ACTION_LISTING_UP,self::ACTION_LISTING_DOWN,self::ACTION_CHECK,self::ACTION_INVALID,self::ACTION_STOCK_RESTORE,self::ACTION_ADD_CLIENT_CODES,];public static function tableName(){return 'kld_log';}
}
使用示例:```php
LogModel::log(LogModel::MODULE_ONLINE_CATE, LogModel::ACTION_EDIT,$params);

日志存到表后可在后台做页面,方便快速查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/26244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全在2024好入行吗?

前言 024年的今天&#xff0c;慎重进入网安行业吧&#xff0c;目前来说信息安全方向的就业对于学历的容忍度比软件开发要大得多&#xff0c;还有很多高中被挖过来的大佬。 理由很简单&#xff0c;目前来说&#xff0c;信息安全的圈子人少&#xff0c;985、211院校很多都才建立…

Java课程设计:基于ssm的旅游管理系统系统(内附源码)

文章目录 一、项目介绍二、项目展示三、源码展示四、源码获取 一、项目介绍 2023年处于信息科技高速发展的大背景之下。在今天&#xff0c;缺少手机和电脑几乎已经成为不可能的事情&#xff0c;人们生活中已经难以离开手机和电脑。针对增加的成本管理和操作,各大旅行社非常必要…

鸿蒙开发文件管理:【@ohos.securityLabel (数据标签)】

数据标签 该模块提供文件数据安全等级的相关功能&#xff1a;向应用程序提供查询、设置文件数据安全等级的JS接口。 说明&#xff1a; 本模块首批接口从API version 9开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import security…

iOS ReactiveCocoa MVVM

学习了在MVVM中如何使用RactiveCocoa&#xff0c;简单的写上一个demo。重点在于如何在MVVM各层之间使用RAC的信号来更方便的在各个层之间进行响应式数据交互。 demo需求&#xff1a;一个登录界面(登录界面只有账号和密码都有输入&#xff0c;登录按钮才可以点击操作)&#xff0…

白酒:茅台镇白酒的口感特点与品质保障

当我们谈及中国的白酒&#xff0c;茅台镇无疑是其中璀璨的一颗明珠。而在这片神奇的土地上&#xff0c;云仓酒庄凭借其与众不同的酿造工艺和卓着的品质保障&#xff0c;成为了茅台镇白酒的新一代佼佼者。今天&#xff0c;让我们一起领略云仓酒庄豪迈白酒的口感特点和品质魅力。…

win11 修改hosts提示无权限

win11下hosts的文件路径 C:\Windows\System32\drivers\etc>hosts修改文件后提示无权限。 我做了好几个尝试&#xff0c;都没个啥用~比如&#xff1a;右键 管理员身份运行&#xff0c;在其他版本的windows上可行&#xff0c;但是win11不行&#xff0c;我用的是微软账号登录的…

【Ardiuno】实验使用ESP32单片机实现高级web服务器暂时动态图表功能(图文)

接下来&#xff0c;我们继续实验示例代码中的Wifi“高级web服务器”&#xff0c;配置相关的无线密码后&#xff0c;开始实验 #include <WiFi.h> #include <WiFiClient.h> #include <WebServer.h> #include <ESPmDNS.h>const char *ssid "XIAOFE…

高通Android 12 右边导航栏改成底部显示

最近同事说需要修改右边导航栏到底部&#xff0c;问怎么搞&#xff1f;然后看下源码尝试下。 1、Android 12修改代码路径 frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.java a/frameworks/base/services/core/java/com/android/server/wm/Display…

快速排序!

快速排序 算法思想partition函数函数签名变量定义选择基准元素初始化指针遍历并分区最终交换返回基准元素的位置完整函数 QuickSort函数函数定义终止条件划分(partition)递归调用 完整函数 算法思想 partition函数 partition函数是快速排序算法中的一个关键部分。它的作用是将…

测试bert_base不同并行方式下的推理性能

测试bert_base不同并行方式下的推理性能 一.测试数据二.测试步骤1.生成bert配置文件2.安装依赖3.deepspeed 4卡tp并行4.FSDP 4卡并行5.手动将权值平均拆到4张卡,单进程多卡推理6.手动切分成4份,基于NCCL实现pipeline并行 本文测试了bert_base模型在不同并行方式下的推理性能 约…

最短路径与最小生成树:Dijkstra、Prim与Kruskal算法详解

在图论中&#xff0c;最短路径和最小生成树问题是两个重要的课题。本文将介绍三种经典的算法&#xff1a;Dijkstra、Prim和Kruskal&#xff0c;并对它们进行对比分析。我们将讨论这些算法解决的问题、各自的优劣性以及它们之间的异同点&#xff0c;并提供完整的代码示例。 Dij…

为什么电容两端电压不能突变

我们先从RC延时电路说起吧&#xff0c;图1是最简单的RC延时电路&#xff0c;给一个阶跃的电压信号&#xff0c;电压会变成黄色曲线这个样子&#xff0c;这是为什么呢&#xff1f; 图1 电压跳变后&#xff0c;电源负极电子移动到电容下极板&#xff0c;排斥上极板电子流动到电源…

c++实现二叉搜索树(上)

宝贝们&#xff0c;好久不见&#xff0c;甚是想念&#x1f917;小吉断更了差多有10多天&#xff0c;在断更的日子里&#xff0c;小吉也有在好好学习数据结构与算法&#xff0c;但是学的并不多而且学的并不是很认真。主要是中途笔记本屏出现问题了&#xff08;这件事有点让小吉我…

Neo4j连接

终端输入&#xff1a; neo4j console 浏览器访问&#xff1a;http://localhost:7474/ 输入用户名和密码&#xff1a;neo4j&#xff0c; 梦想密码&#xff08;首次neo4j&#xff09; 代码连接用新的服务器地址&#xff1a; g Graph(neo4j://localhost:7687, auth(neo4j, ))…

函数递归(C语言)(详细过程!)

函数递归 一. 递归是什么1.1 递归的思想1.2 递归的限制条件 二. 递归举例2.1 求n的阶乘2.2 按顺序打印一个整数的每一位 三. 递归与迭代3.1 求第n个斐波那契数 一. 递归是什么 递归是学习C语言很重要的一个知识&#xff0c;递归就是函数自己调用自己&#xff0c;是一种解决问题…

2024年中国移动游戏市场研究报告

来源&#xff1a;点点数据&#xff1a; 近期历史回顾&#xff1a; 面向水泥行业的5G虚拟专网技术要求&#xff08;2024&#xff09;.pdf 2024年F5G-A绿色万兆全光园区白皮书.pdf 2024年全球废物管理展望报告.pdf 内容管理系统 2024-2025中国羊奶粉市场消费趋势洞察报告.pdf 20…

Web端在线Stomp服务测试与WebSocket服务测试

Stomp服务测试 支持连接、发送、订阅、接收&#xff0c;可设置请求头、自动重连 低配置云服务器&#xff0c;首次加载速度较慢&#xff0c;请耐心等候 预览页面&#xff1a;http://www.daelui.com/#/tigerlair/saas/preview/lxbho9lkzvgc 演练页面&#xff1a;http://www.da…

Django之云存储(一)

一、介绍 用户上传的文件以及项目中使用的静态文件,除了保存在本地服务器,还在可以保存在云服务中,比如: 阿里云七牛云(课程选用)亚马逊云等1.1、使用方式 注册账号 七牛云开发者平台 实名认证 创建空间

pycharm终端pip安装模块成功但还是显示找不到 ModuleNotFoundError: No module named

报错信息&#xff1a; ModuleNotFoundError: No module named 但是分明已经安装过此模块&#xff1a; 在cmd运行pip list 查看所有安装过的包找到了安装过&#xff1a; 如果重新安装就是这样&#xff1a;显示已经存在了 问题排查&#xff1a; 直接根据重新安装的显示已存在的…

Beego 使用教程 9:ORM 操作数据库(上)

beego 是一个用于Go编程语言的开源、高性能的 web 框架 beego 被用于在Go语言中企业应用程序的快速开发&#xff0c;包括RESTful API、web应用程序和后端服务。它的灵感来源于Tornado&#xff0c; Sinatra 和 Flask beego 官网&#xff1a;http://beego.gocn.vip/ 上面的 be…