出于监控多用户操作后台的目的,往往需要把各个管理员操作了什么记录下来。

这个功能用yii2来实现简直是太简单了!下边上代码~

此demo基于advanced,具体功能可以参考demo 帐号demo 密码111111

1、在backend目录创建components/AdminLog.php

<?php
namespace backend\components;

use Yii;
use yii\helpers\Url;

class AdminLog
{
    public static function write($event)
    {
        // 具体要记录什么东西,自己来优化$description
        if(!empty($event->changedAttributes)) {
            $desc = \'\';
            foreach($event->changedAttributes as $name => $value) {
                $desc .= $name . \' : \' . $value . \'=>\' . $event->sender->getAttribute($name) . \',\';
            }
            $desc = substr($desc, 0, -1);
            $description = Yii::$app->user->identity->username . \'修改了\' . $event->sender->className() . \'id:\' . $event->sender->primaryKey()[0] . \'的\' . $desc;
            $route = Url::to();
            $userId = Yii::$app->user->id;
            $model = new \common\models\AdminLog();
            $data = [
                \'route\' => $route,
                \'description\' => $description,
                \'user_id\' => $userId,
                \'created_at\' => time(),
            ];
            $model->setAttributes($data);
            $model->save();
        }
    }
}

2、在backend/config/main.php添加

\'on beforeRequest\' => function($event) {
    \yii\base\Event::on(
        \yii\db\BaseActiveRecord::className(), 
        \yii\db\BaseActiveRecord::EVENT_AFTER_UPDATE, 
        [\'backend\components\AdminLog\', \'write\']
    );
},

3、mysql 中创建admin_log表

CREATE TABLE `admin_log` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `route` varchar(255) NOT NULL DEFAULT \'\',
  `description` text,
  `created_at` int(10) NOT NULL,
  `user_id` int(10) NOT NULL DEFAULT \'0\',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

4、用gii生成AdminLog模型:命名空间为common\models

来源:http://www.51siyuan.cn/2.html

版权声明:本文为grimm原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/grimm/p/5807697.html