一、连接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. 【caffe】执行训练

    @tags caffe 训练 是在windows平台上. 主要是使用/caffe.exe,配合动作参数train,以及指定solver文件.e.g.: cd %caffe_root% %caffe_b ...

  2. UOJ265 【NOIP2016】愤怒的小鸟

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  3. hdu 3089 约瑟夫环

    原来并不知道约瑟夫环还可以递推直接解orz 约瑟夫问题的递推公式: 设f[n]表示一共n个人,数到k出局,这样最后的winner (n个人从0开始标号,即0--n-1) f[n]=(f[n-1]+k) ...

  4. [NOIP2014] 提高组 洛谷P1328 生活大爆炸版石头剪刀布

    题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负.在<生活大爆炸>第二季第8 集中出现了一种石头剪刀布的升级版游戏. 升级版游戏在传统的 ...

  5. Linux GDB Debugging

    Catalog . GDB Introduction . GDB基本命令 1. GDB Introduction GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师 ...

  6. 关于The serializable class XXX does not declare a static final serialVersionUID field of type long的警告

    编写实体类并且继承序列化接口时候,实体类会有警告,要生成一个静态的serialVersionUID. 上网搜了一下资料,现通俗解释一下: 点击前2个选项,会生成: private static fin ...

  7. 重写Object类中的equals方法

    Object是所有类的父亲,这个类有很多方法,我们都可以直接调用,但有些方法并不适合,例如下面的student类 public class Student { //姓名.学号.年纪 private S ...

  8. linux系统性能监视命令

    preface as a linux engineer,you should know how to use these command of monitor system,so let's lear ...

  9. 回调函数通俗解析(之前看了很久都不理解,今天终于ok啦)

    自学jquery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速google之,发现原来中文翻译成回调.也就是回调函数了.不懂啊,于是在google回调函数,发现网上的中文解释实在是 ...

  10. 日志分析 第五章 安装logstash

    logstash是java应用,依赖JDK,首先需要安装JDK,在安装jdk过程中,logstash-2.3.4使用JDK-1.7版本有bug,使用JDK-1.8版本正常,因此我们安装JDK-1.8版 ...