YII2 实现后台操作记录日志(转)
一、连接linux服务器,创建数据文件
php yii migrate/create user_log

二、修改数据文件
console/migrations/m150721_032220_admin_log.php
<?php use 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

四、创建操作记录的控制器、模型、视图
控制器
<?php namespace 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),
]);
} }
模型
<?php namespace 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视图 <?php use 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视图 <?php use 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.');
}
}
YII2 实现后台操作记录日志(转)的更多相关文章
- YII2 实现后台操作记录日志
一.连接linux服务器,创建数据文件 php yii migrate/create user_log 二.修改数据文件 console/migrations/m150721_032220_admin ...
- C#先执行一段sql等后台操作后再提示是否后续操作confrim
应用场景:例如选择一个单据号打击打印后先去数据库检索是否有打打印过,如果有则提示,已打印,是否再打 如果没有则不提示,直接进行打印. 实现原理:多做一个隐藏按钮去实现打印功能,页面上的打印按钮则进行数 ...
- Windows Auzre 微软的云计算产品的后台操作界面
Windows Auzre 微软的云计算产品的后台操作界面,试用期,相比于阿里云后台操作不是人. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTmFvbG ...
- log4j 配置,tomcat 启动或有后台操作时,控制台会显示很多 DEBUG 信息
log4j 配置,tomcat 启动或有后台操作时,控制台会显示很多 DEBUG 信息 日志信息可以以文件形式显示,也可以在控制台输出,在 log4j.properties 文件设置. 控制台有很多 ...
- MFC程序执行后台操作时不允许操作界面的一种方法
在使用MFC编写界面程序时,有时候会遇到像点击按钮后,后台进行大量操作后才显示处理结果这种情况,在后台处理过程中,界面不应该被允许做任何操作,这里介绍一种方法. 解决办法 点击按钮后,弹出一个模态对话 ...
- asp.net后台操作javascript:confirm返回值
在asp.net中使用confirm可以分为两种: 1.没有使用ajax,confirm会引起也面刷新 2.使用了ajax,不会刷新 A.没有使用ajax,可以用StringBuilder来完成. ( ...
- crm 系统项目(二) admin 后台操作表格
crm 系统项目(二) admin 后台操作表格 1. app下创建 templates 运行的时候 先找全局的templates——> 按照app的注册顺序找templates中的文件 2. ...
- 织梦DEDECMS本地后台操作卡顿的解决方法
打开/data/common.inc.php,把默认的$cfg_dbhost = ‘localhost‘修改为$cfg_dbhost = ‘127.0.0.1’;保存.然后你会发现后台操作起来流畅多了 ...
- solr后台操作Documents之增删改查
偶尔会用到solr后台操作一些数据,比如测试等一些情况.但具体用的时候可能会忘记,或者搜的时候结果不全,在此略详细的记一下. 1.添加 {"id":6,"title&qu ...
随机推荐
- C# web 获取服务端cookie
CookieContainer cookies = new CookieContainer(); string url = "http://120.24.56.48:8 ...
- js 删除
/* * 方法:Array.remove(dx) * 功能:根据元素值删除数组元素. * 参数:元素值 * 返回:在原数组上修改数组 * 作者:pxp */ Array.prototype. ...
- iOS二维码扫描IOS7系统实现
扫描相关类 二维码扫描需要获取摄像头并读取照片信息,因此我们需要导入系统的AVFoundation框架,创建视频会话.我们需要用到一下几个类: AVCaptureSession 会话对象.此类作为硬件 ...
- 【BZOJ-4326】运输计划 树链剖分 + 树上差分 + 二分
4326: NOIP2015 运输计划 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 703 Solved: 461[Submit][Status] ...
- 【BZOJ-2440】完全平方数 容斥原理 + 线性筛莫比乌斯反演函数 + 二分判定
2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2371 Solved: 1143[Submit][Sta ...
- http80端口转发(实现微信公众号接口绑定IP时,同时支持多个公众号)
http80端口转发 背景 微信公众平台接口绑定服务器时,如果使用IP需要使用80端口,此组件可实现一个IP上绑定多个公众平台接口 使用方法 http://(IP)/WeixinMP/(转发的地址Ba ...
- app 摇一摇功能
1.重写canBecomeFirstResponder ,并返回YES -(BOOL)canBecomeFirstResponder{ return YES; } 2.重写UIResponder的三个 ...
- yocto系统介绍
The Yocto Project is an open source collaboration project that provides templates, tools and methods ...
- HDU 1846 Brave Game(巴什博弈)
题目链接: 传送门 Brave Game Time Limit: 1000MS Memory Limit: 65536K 题目描述 各位勇敢者要玩的第一个游戏是什么呢?很简单,它是这样定义的: ...
- Appium运行时,error: Logcat capture failed: spawn ENOENT的解决办法
目前发现有以下两种可能: 一:查看环境变量是否配置成功. ANDROIDSDK D:\my_2_softwares\JAVA\adt-bundle-windows-x86-20140702\sdkPA ...