YII2 实现后台操作记录日志
一、连接linux服务器,创建数据文件
php yii migrate/create user_log
二、修改数据文件
console/migrations/m150721_032220_admin_log.php
<?phpuse yii\db\Schema; use yii\db\Migration;class m150721_032220_admin_log extends Migration {public function up(){$tableOptions = null;if ($this->db->driverName === 'mysql') {$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE=InnoDB COMMENT="后台操作记录"';}$this->createTable('{{%admin_log}}', [//'name'=>Schema::TYPE_STRING.'(200) PRIMARY KEY NOT NULL','id'=>Schema::TYPE_PK,'admin_id'=>Schema::TYPE_INTEGER.'(10) UNSIGNED NOT NULL COMMENT "操作用户ID"','admin_name'=>Schema::TYPE_STRING.'(200) NOT NULL COMMENT "操作用户名"','addtime'=>Schema::TYPE_INTEGER.'(10) NOT NULL COMMENT "记录时间"','admin_ip'=>Schema::TYPE_STRING.'(200) NOT NULL COMMENT "操作用户IP"','admin_agent'=>Schema::TYPE_STRING.'(200) NOT NULL COMMENT "操作用户浏览器代理商"','title'=>Schema::TYPE_STRING.'(200) NOT NULL COMMENT "记录描述"','model'=>Schema::TYPE_STRING.'(200) NOT NULL COMMENT "操作模块(例:文章)"','type'=>Schema::TYPE_STRING.'(200) NOT NULL COMMENT "操作类型(例:添加)"','handle_id'=>Schema::TYPE_INTEGER.'(10) NOT NULL COMMENT "操作对象ID"','result'=>Schema::TYPE_TEXT.' NOT NULL COMMENT "操作结果"','describe'=>Schema::TYPE_TEXT.' NOT NULL COMMENT "备注"',], $tableOptions);}public function down(){$this->dropTable('{{%admin_log}}');} }
三、根据数据文件生成数据表
php yii migrate
四、创建操作记录的控制器、模型、视图
控制器
<?phpnamespace backend\controllers;use backend\components\BaseController; use common\models\AdminLog; use yii; use yii\data\ActiveDataProvider;class AdminLogController extends BaseController {public function actionIndex(){$dataProvider = new ActiveDataProvider(['query' => AdminLog::find(),'sort' => ['defaultOrder' => ['addtime' => SORT_DESC]],]);return $this->render('index',['dataProvider' => $dataProvider]);}public function actionView($id){return $this->render('view',['model'=>AdminLog::findOne($id),]);}}
模型
<?phpnamespace common\models;use Yii;/*** This is the model class for table "{{%article}}".**/ class AdminLog extends \yii\db\ActiveRecord {/*** @inheritdoc*/public static function tableName(){return '{{%admin_log}}';}/*** @inheritdoc*/public function attributeLabels(){return ['id'=>'操作记录ID','title'=>'操作记录描述','addtime'=>'记录时间','admin_name'=>'操作人姓名','admin_ip'=>'操作人IP地址','admin_agent'=>'操作人浏览器代理商','controller'=>'操作控制器名称','action'=>'操作类型','objId'=>'操作数据编号','result'=>'操作结果',];}public static function saveLog($controller ,$action,$result,$objId){$model = new self;$model->admin_ip = Yii::$app->request->userIP;$headers = Yii::$app->request->headers;$model->addtime = time();if ($headers->has('User-Agent')) {$model->admin_agent = $headers->get('User-Agent');}$model->admin_id = Yii::$app->user->identity->id;$model->admin_name = Yii::$app->user->identity->email;$controllers = ['article','video','collection','collection-album','category','banner','exchange','user','admin'];if(!in_array(strtolower($controller),$controllers)) $controller = '';$actions = ['create','update','delete','login','logout'];if(!in_array(strtolower($action),$actions))$action = '';$model->controller = $controller;$model->action = $action;$model->result = $result;$model->objId = $objId;$model->title = $model->admin_name.' '.$model->action.' '.$model->controller;$model->save(false);} }
视图
index视图 <?phpuse yii\grid\GridView;/* @var $this yii\web\View */ /* @var $dataProvider yii\data\ActiveDataProvider */$this->title = '操作记录'; $this->params['breadcrumbs'][] = $this->title; ?> <div class="handle-index"><?= GridView::widget(['dataProvider' => $dataProvider,'columns' => ['title',['attribute'=>'addtime','value'=>function($model){return date('Y-m-d H:i:s',$model->addtime);},],['class' => 'yii\grid\ActionColumn','template'=>'{view}']],'tableOptions'=>['class' => 'table table-striped']]); ?></div>
view视图 <?phpuse yii\widgets\DetailView;/* @var $this yii\web\View */ /* @var $model backend\models\Admin */$this->title = '操作记录: '.$model->title; $this->params['breadcrumbs'][] = ['label' => '操作记录', 'url' => ['index']]; $this->params['breadcrumbs'][] = $this->title; ?> <div class="admin-view"><?= DetailView::widget(['model' => $model,'attributes' => ['id','admin_name','addtime:datetime','admin_ip','admin_agent','controller','action','objId','result'],]) ?></div>
五、实现记录添加
控制器中调用 public function actionCreate(){$model = new Banner();$model->status=Banner::STATUS_DISPLAY;if ($model->load(Yii::$app->request->post()) && $model->save()) {//保存操作记录 \common\models\AdminLog::saveLog('banner','create',$model->searchById($model->primaryKey),$model->primaryKey);Yii::$app->session->setFlash('success','Banner【'.$model->title.'】发布成功');return $this->redirect(['index']);} else {return $this->render('create', ['model' => $model,]);}}
public function searchById($id){ if (($model = Banner::findOne($id)) !== null) { return json_encode($model->toArray()); } else { throw new \yii\web\NotFoundHttpException('The requested page does not exist.'); }}
转载于:https://www.cnblogs.com/personalnote/p/4664046.html
YII2 实现后台操作记录日志相关推荐
- Yii2.0 后台UI框架以及权限管理扩展实现权限菜单管理
Yii2.0 后台UI框架以及权限管理扩展实现权限菜单管理 一.安装后台框架ui 二.安装权限管理扩展 三.实现权限菜单管理 一.安装后台框架ui composer require dmstr/yii ...
- Yii2搭建后台并实现rbac权限控制完整实例教程
分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 photoshop教程 ...
- 在layui中使用ajax传值给后台,解决layui批量传值到后台操作时出现传值为空的问题...
如图,前台的样子,data的参数为 [ {"good_id":1,"good_name":"标样-总磷","good_num&qu ...
- 在Android中使用Handler和Thread线程执行后台操作
在 Android中使用Handler和Thread线程执行后台操作 对于线程的控制,我们将介绍一个 Handler类,使用该类可以对运行在不同线程中的多个任务进行排队,并使用Message和Runn ...
- 小程序 按需_小程序后台操作,新手需知道的几个要点
这节课我们来讲一下小程序的基本知识及后台操作,对上一节课的内容做一个补充.相信大家对于小程序都有一定的了解,对于小程序无需安装,无需下载,即开即用,用完即走的使用方式也是非常熟悉的.那么对于我们想要搭 ...
- php网站后台管理反应慢,phpcmsv9 后台操作反应慢的原因
phpcmsv9 后台操作反应慢的原因: 修改数据库连接localhost为127.0.0.1具体如下 修改文件database.phpreturn array ( 'default' => a ...
- log4j 配置,tomcat 启动或有后台操作时,控制台会显示很多 DEBUG 信息
log4j 配置,tomcat 启动或有后台操作时,控制台会显示很多 DEBUG 信息 日志信息可以以文件形式显示,也可以在控制台输出,在 log4j.properties 文件设置. 控制台有很多 ...
- centos6配置日志外发_CentOS6下记录后台操作日志的两种方式
CentOS6下记录后台操作日志的两种方式 平时为了记录登录CentOS Linux系统的操作命令,需要将操作日志记录下来,下面介绍两种方式 1.利用script以及scriptreplay工具 sc ...
- YII2 数据库常用操作案例
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.YII2 数据库常用操作案例 1.关于分页 50.查询当月生日的客户 前言 提示:这里可以添加本文要记录的大概内容 ...
最新文章
- jedis使用_网易架构师心得:Springboot下使用redis踩过的坑
- 我来了 开源社区的兄弟门
- 重新梳理下js中的深拷贝和浅拷贝
- 行程日志2010-03-16沙井一村(1)
- SpringBoot注解@Value取值取不到问题
- 《南溪的目标检测学习笔记》——权重初始化
- c语言如何答应出数所在数组的下标_零基础学C语言——数组
- 页面回填当前日期与时间
- java多线程(线程安全,线程同步)
- Word:转换PDF
- 饺子播放器使用IJKPlayer播放MP4文件
- 主板电源开关接口图解_图解:主板电线接法(电源开关、重启等)
- 给计算机e盘加密,win10系统给e盘加密的操作方法
- 生鲜电商之百果园的未来
- NAT技术配置(内外网IP地址转换)
- java + jfreechart + itextpdf创建折线图饼图并导出为pdf
- 基于websocket的网页实时消息推送与在线聊天(上篇)
- Scene…… couldn‘t be loaded because it has not been added to the build settings or the AssetBundle...
- OI退役记,第五部分,CTSCAPIO2017
- 因式分解,输出素数因子及其指数
热门文章
- html 使用百度搜索,百度搜索uzer,进入主页
- html大小写字符串转换成整数,c++字符串大小写转换
- linux系统ip占用,IP地址被占用的问题,折腾我好几天了 (已解决)
- linux下怎样看设备的中断号,Linux设备驱动的中断处理
- 信息学奥赛课课通VS中学生计算机,数学奥赛VS信息学奥赛 孩子们该如何选择
- anaconda方法安装python教程_anaconda的安装教程和使用方法
- linux8安装ftp服务,CentOS8.0 安装配置ftp服务器的实现方法
- 前端性能优化篇——浏览器同域名并发请求对限制
- Connection to @localhost failed. [08001] Could not create connection to database server. Attempt
- Java Collection接口详解