一、连接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 实现后台操作记录日志的更多相关文章

  1. YII2 实现后台操作记录日志(转)

    一.连接linux服务器,创建数据文件 php yii migrate/create user_log 二.修改数据文件 console/migrations/m150721_032220_admin ...

  2. C#先执行一段sql等后台操作后再提示是否后续操作confrim

    应用场景:例如选择一个单据号打击打印后先去数据库检索是否有打打印过,如果有则提示,已打印,是否再打 如果没有则不提示,直接进行打印. 实现原理:多做一个隐藏按钮去实现打印功能,页面上的打印按钮则进行数 ...

  3. Windows Auzre 微软的云计算产品的后台操作界面

    Windows Auzre 微软的云计算产品的后台操作界面,试用期,相比于阿里云后台操作不是人. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTmFvbG ...

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

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

  5. MFC程序执行后台操作时不允许操作界面的一种方法

    在使用MFC编写界面程序时,有时候会遇到像点击按钮后,后台进行大量操作后才显示处理结果这种情况,在后台处理过程中,界面不应该被允许做任何操作,这里介绍一种方法. 解决办法 点击按钮后,弹出一个模态对话 ...

  6. asp.net后台操作javascript:confirm返回值

    在asp.net中使用confirm可以分为两种: 1.没有使用ajax,confirm会引起也面刷新 2.使用了ajax,不会刷新 A.没有使用ajax,可以用StringBuilder来完成. ( ...

  7. crm 系统项目(二) admin 后台操作表格

    crm 系统项目(二) admin 后台操作表格 1. app下创建 templates  运行的时候 先找全局的templates——> 按照app的注册顺序找templates中的文件 2. ...

  8. 织梦DEDECMS本地后台操作卡顿的解决方法

    打开/data/common.inc.php,把默认的$cfg_dbhost = ‘localhost‘修改为$cfg_dbhost = ‘127.0.0.1’;保存.然后你会发现后台操作起来流畅多了 ...

  9. solr后台操作Documents之增删改查

    偶尔会用到solr后台操作一些数据,比如测试等一些情况.但具体用的时候可能会忘记,或者搜的时候结果不全,在此略详细的记一下. 1.添加 {"id":6,"title&qu ...

随机推荐

  1. C++的类型萃取技术

    应该说,迭代器就是一种智能指针,因此,它也就拥有了一般指针的所有特点——能够对其进行*和->操作.但是在遍历容器的时候,不可避免的要对遍历的容器内部有所了解,所以,设计一个迭代器也就自然而然的变 ...

  2. 脑波设备mindwaveTGC接口示例

    TGC是一个后台应用程序,它负责和脑波设备建立连接,并获取数据,另一方面,它打开了一个端口在监听,让二次开发的应用程序,可以通过socket连接到这个TGC后台程序,获取脑波数据并展示,这种接口适合非 ...

  3. 第一次当Uber司机,就拉到漂亮妹纸

    黑马哥的Uber司机端装上很久了,一次活儿也没拉,心里一直有一种当“张师傅”的冲动.黑马哥当Uber司机,肯定不是为了图挣钱,也不是因为Uber有“新约炮神器”的称号,能通过“拉活”来泡妹纸.黑马哥体 ...

  4. GitHub Linux下使用方法

    1. 在网站注册帐号,创建工程 test 进入工程,右下角会有一个项目仓库的地址.https://github.com/braverior/test.git 2.Linux下 安装github sud ...

  5. Boost源代码学习---shared_ptr.hpp

    最近观看Boost库源代码.Boost功能强大的库,但它的许多源代码,十一细读太费时间,毕竟,还有其他东西要学.所以我决定脱脂感兴趣的章节,他们的设计思路和难以理解的地方记录. shared_ptr是 ...

  6. 2014-07-23 利用ASP.NET自带控件实现单文件上传与下载

    效果图 上传文件页面: 下载文件页面:  1.母版页site.Master <%@ Master Language="C#" AutoEventWireup="tr ...

  7. SQL Server索引进阶:第九级,读懂执行计划

    原文地址: Stairway to SQL Server Indexes: Level 9,Reading Query Plans 本文是SQL Server索引进阶系列(Stairway to SQ ...

  8. Uploadif稍做扩展使用

    文章出自Uploadify扩展配置使用http://www.wuyinweb.com/doc/52/57.aspx 在做项目中涉及多文件上传,经过筛选,选择了Uploaidify,但还涉及一个问题,就 ...

  9. DEV中gridview常用属性的设置

    1.隐藏最上面的GroupPanel: gridView1.OptionsView.ShowGroupPanel=false; 2.得到当前选定记录某字段的值: sValue=Table.Rows[g ...

  10. 从零开始写驱动——vfd专用驱动芯片HT16514并行驱动程序编写

    前言 一直看别人搞的 vfd 很漂亮,前段时间淘了个 vfd 模块来,但没有模块资料,还好芯片没有打磨的,良心商家啊.周末抽空来研究一下这个东西. 从零开始 打开外壳 测试线路 查看芯片是 HT165 ...