yidashi 2016-03-11 16:38:26 13323次浏览 8条评论 27 10 0

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

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

在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;
            $data = [
                'route' => $route,
                'description' => $description,
                '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;

用gii生成AdminLog模型

php yii gii/model --ns=common\\models --modelClass=AdminLog --tableName=admin_log

so easy!

觉得很赞
  • 评论于 2016-07-26 09:32 举报

    怎么我按这个做的却没有数据插入数据表的?我的也是advanced

    1 条回复
    评论于 2016-07-26 10:22 回复

    自己排查吧,帮不了你。

  • 评论于 2016-07-28 07:26 举报

    有人使用成功过么?

    2 条回复
    评论于 2016-07-28 10:05 回复

    不成功?有demo地址,demo里有全部源码。不成功是连复制都不会。

    评论于 2016-07-29 09:14 回复
    $data = [
        'route'        => $route,
        'description'  => $description,
        'created_at'   => time(),
        'user_id'      => $userId,
    ];
    
    , 觉得很赞
  • 评论于 2016-12-02 14:17 举报

    楼主,你是直接copy的吧,create_at是必填的哈。后面的朋友需要注意,楼上以指出了。

  • 评论于 2017-02-28 16:54 举报

    楼主,添加,删除日志怎么处理。这个貌似只能处理编辑的。。我还发现记录添加日志后,日志add,会造成不断循环~~这得怎么搞?

    2 条回复
    评论于 2017-03-02 00:30 回复
    评论于 2018-05-03 11:04 回复

    学习了,赞一个

    觉得很赞
  • 评论于 2017-05-23 17:30 举报

    不知道怎么回事,'on beforeRequest' => function($event) { }这个不能要,要了就执行不到,然后未修改但点了几提交也要插入日志

  • 评论于 2017-12-25 16:04 举报

    我成功了,你们都是什么问题

    3 条回复
    评论于 2017-12-25 16:05 回复

    on beforeRequest 在配置中要和components 同级

    评论于 2018-05-03 10:37 回复

    我就是卡这儿了,感谢

    评论于 2018-05-03 10:40 回复

    $event->sender->getPrimaryKey() 获取到id数值了

    觉得很赞
  • 评论于 2018-11-15 18:09 举报

    yii1有快速实现方法吗

  • 评论于 2018-11-21 21:10 举报

    这个貌似只有编辑更新的时候有记录,添加和删除应该没有被记录

您需要登录后才可以评论。登录 | 立即注册