一、连接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 实现后台操作记录日志相关推荐

  1. Yii2.0 后台UI框架以及权限管理扩展实现权限菜单管理

    Yii2.0 后台UI框架以及权限管理扩展实现权限菜单管理 一.安装后台框架ui 二.安装权限管理扩展 三.实现权限菜单管理 一.安装后台框架ui composer require dmstr/yii ...

  2. Yii2搭建后台并实现rbac权限控制完整实例教程

    分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 photoshop教程 ...

  3. 在layui中使用ajax传值给后台,解决layui批量传值到后台操作时出现传值为空的问题...

    如图,前台的样子,data的参数为 [ {"good_id":1,"good_name":"标样-总磷","good_num&qu ...

  4. 在Android中使用Handler和Thread线程执行后台操作

    在 Android中使用Handler和Thread线程执行后台操作 对于线程的控制,我们将介绍一个 Handler类,使用该类可以对运行在不同线程中的多个任务进行排队,并使用Message和Runn ...

  5. 小程序 按需_小程序后台操作,新手需知道的几个要点

    这节课我们来讲一下小程序的基本知识及后台操作,对上一节课的内容做一个补充.相信大家对于小程序都有一定的了解,对于小程序无需安装,无需下载,即开即用,用完即走的使用方式也是非常熟悉的.那么对于我们想要搭 ...

  6. php网站后台管理反应慢,phpcmsv9 后台操作反应慢的原因

    phpcmsv9 后台操作反应慢的原因: 修改数据库连接localhost为127.0.0.1具体如下 修改文件database.phpreturn array ( 'default' => a ...

  7. log4j 配置,tomcat 启动或有后台操作时,控制台会显示很多 DEBUG 信息

    log4j 配置,tomcat 启动或有后台操作时,控制台会显示很多 DEBUG 信息 日志信息可以以文件形式显示,也可以在控制台输出,在 log4j.properties 文件设置. 控制台有很多 ...

  8. centos6配置日志外发_CentOS6下记录后台操作日志的两种方式

    CentOS6下记录后台操作日志的两种方式 平时为了记录登录CentOS Linux系统的操作命令,需要将操作日志记录下来,下面介绍两种方式 1.利用script以及scriptreplay工具 sc ...

  9. YII2 数据库常用操作案例

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.YII2 数据库常用操作案例 1.关于分页 50.查询当月生日的客户 前言 提示:这里可以添加本文要记录的大概内容 ...

最新文章

  1. jedis使用_网易架构师心得:Springboot下使用redis踩过的坑
  2. 我来了 开源社区的兄弟门
  3. 重新梳理下js中的深拷贝和浅拷贝
  4. 行程日志2010-03-16沙井一村(1)
  5. SpringBoot注解@Value取值取不到问题
  6. 《南溪的目标检测学习笔记》——权重初始化
  7. c语言如何答应出数所在数组的下标_零基础学C语言——数组
  8. 页面回填当前日期与时间
  9. java多线程(线程安全,线程同步)
  10. Word:转换PDF
  11. 饺子播放器使用IJKPlayer播放MP4文件
  12. 主板电源开关接口图解_图解:主板电线接法(电源开关、重启等)
  13. 给计算机e盘加密,win10系统给e盘加密的操作方法
  14. 生鲜电商之百果园的未来
  15. NAT技术配置(内外网IP地址转换)
  16. java + jfreechart + itextpdf创建折线图饼图并导出为pdf
  17. 基于websocket的网页实时消息推送与在线聊天(上篇)
  18. Scene…… couldn‘t be loaded because it has not been added to the build settings or the AssetBundle...
  19. OI退役记,第五部分,CTSCAPIO2017
  20. 因式分解,输出素数因子及其指数

热门文章

  1. html 使用百度搜索,百度搜索uzer,进入主页
  2. html大小写字符串转换成整数,c++字符串大小写转换
  3. linux系统ip占用,IP地址被占用的问题,折腾我好几天了 (已解决)
  4. linux下怎样看设备的中断号,Linux设备驱动的中断处理
  5. 信息学奥赛课课通VS中学生计算机,数学奥赛VS信息学奥赛 孩子们该如何选择
  6. anaconda方法安装python教程_anaconda的安装教程和使用方法
  7. linux8安装ftp服务,CentOS8.0 安装配置ftp服务器的实现方法
  8. 前端性能优化篇——浏览器同域名并发请求对限制
  9. Connection to @localhost failed. [08001] Could not create connection to database server. Attempt
  10. Java Collection接口详解