非常简单的方法在你的后台添加《系统管理员操作日志》的功能
yii2 2018-10-22 17:54:37

 在backend目录创建components/AdminLog.php

PHP Code复制内容到剪贴板
  1. <?php  
  2.   
  3. namespace backend\components;  
  4.   
  5. use Yii;  
  6. use yii\helpers\Url;  
  7.   
  8. class AdminLog  
  9. {  
  10.     public static function write($event)  
  11.     {  
  12.         // 排除日志表自身,没有主键的表不记录(没想到怎么记录。。每个表尽量都有主键吧,不一定非是自增id)  
  13.         if($event->sender instanceof \common\models\AdminLog || !$event->sender->primaryKey()) {  
  14.             return;  
  15.         }  
  16.         // 显示详情有待优化,不过基本功能完整齐全  
  17.         if ($event->name == ActiveRecord::EVENT_AFTER_INSERT) {  
  18.             $description = "%s新增了表%s %s:%s的%s";  
  19.         } elseif($event->name == ActiveRecord::EVENT_AFTER_UPDATE) {  
  20.             $description = "%s修改了表%s %s:%s的%s";  
  21.         } else {  
  22.             $description = "%s删除了表%s %s:%s%s";  
  23.         }  
  24.         if (!emptyempty($event->changedAttributes)) {  
  25.             $desc = '';  
  26.             foreach($event->changedAttributes as $name => $value) {  
  27.                 $desc .= $name . ' : ' . $value . '=>' . $event->sender->getAttribute($name) . ',';  
  28.             }  
  29.             $desc = substr($desc, 0, -1);  
  30.         } else {  
  31.             $desc = '';  
  32.         }  
  33.         $userName = Yii::$app->user->identity->username;  
  34.         $tableName = $event->sender->tableSchema->name;  
  35.         $description = sprintf($description$userName$tableName$event->sender->primaryKey()[0], $event->sender->getPrimaryKey(), $desc);  
  36.   
  37.         $route = Url::to();  
  38.         $userId = Yii::$app->user->id;  
  39.         $ip = ip2long(Yii::$app->request->userIP);  
  40.         $data = [  
  41.             'route' => $route,  
  42.             'description' => $description,  
  43.             'user_id' => $userId,  
  44.             'ip' => $ip  
  45.         ];  
  46.         $model = new common\models\AdminLog();  
  47.         $model->setAttributes($data);  
  48.         $model->save();  
  49.     }  
  50. }  

 

 在backend/config/main.php添加

PHP Code复制内容到剪贴板
  1. 'on beforeRequest' => function($event) {  
  2.         \yii\base\Event::on(\yii\db\BaseActiveRecord::className(), \yii\db\BaseActiveRecord::EVENT_AFTER_INSERT, ['backend\components\AdminLog''write']);  
  3.         \yii\base\Event::on(\yii\db\BaseActiveRecord::className(), \yii\db\BaseActiveRecord::EVENT_AFTER_UPDATE, ['backend\components\AdminLog''write']);  
  4.         \yii\base\Event::on(\yii\db\BaseActiveRecord::className(), \yii\db\BaseActiveRecord::EVENT_AFTER_DELETE, ['backend\components\AdminLog''write']);  
  5.     },  

 

mysql中创建admin_log表

PHP Code复制内容到剪贴板
  1. CREATE TABLE `admin_log` (  
  2.   `id` int(10) NOT NULL AUTO_INCREMENT,  
  3.   `route` varchar(255) NOT NULL DEFAULT '',  
  4.   `description` text,  
  5.   `created_at` int(10) NOT NULL,  
  6.   `user_id` int(10) NOT NULL DEFAULT '0',  
  7.   PRIMARY KEY (`id`)  
  8. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;  

 

用gii生成AdminLog模型

PHP Code复制内容到剪贴板
  1. php yii gii/model --ns=common\\models --modelClass=AdminLog --tableName=admin_log  

 

 

本文来自于:http://www.yoyo88.cn/study/yii2/377.html

Powered by yoyo苏ICP备15045725号