yii2记录admin操作日志

来源:互联网 发布:沪宁杭 知乎 编辑:程序博客网 时间:2024/06/06 03:19

出于监控多用户操作后台的目的,往往需要把各个管理员操作了什么记录下来。这个功能用yii2来实现简直是太简单了!下边上代码~

在backend目录创建components/AdminLog.php

<?phpnamespace 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;            $data = [                'route' => $route,                'description' => $description,                'created_at'=>time(),                'user_id' => $userId            ];            $model = new \common\models\AdminLog();            $model->setAttributes($data);            $model->save();        }    }}

在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']);    },

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;
1 0