php记录后台操作日志,Yii框架记录后台操作日志

配置main.php

##在backend/config/main.php添加

#和components同级

'on beforeRequest' => function($event) {

\yii\base\Event::on(\yii\db\BaseActiveRecord::className(),

\yii\db\BaseActiveRecord::EVENT_AFTER_UPDATE, ['common\models\TbLog', 'write']);##日志model和写日志静态方法

},

配置日志model和写入方法

namespace common\models;

use Yii;

use yii\db\ActiveRecord;

class TbLog extends \common\models\BaseModel

{

public static function tableName()

{

return "{{%tb_log}}";

}

public static function write($event)

{

// 排除日志表自身,没有主键的表不记录(没想到怎么记录。。每个表尽量都有主键吧,不一定非是自增id)

if($event->sender instanceof \common\models\TbLog || !$event->sender->primaryKey()) {

return;

}

$log_format = "修改 {%s} 由 {%s} 修改为 {%s},";

$cookie = \Yii::$app->request->cookies;

$admin_id = $cookie->getValue('uid', 0);

$admin_name = $cookie->getValue('name', '');

// 显示详情有待优化,不过基本功能完整齐全

if ($event->name == ActiveRecord::EVENT_AFTER_INSERT) {

$description = "%s新增了表%s %s:%s的%s";

} elseif($event->name == ActiveRecord::EVENT_AFTER_UPDATE) {

$description = "%s修改了表%s %s:%s的%s";

} else {

$description = "%s删除了表%s %s:%s%s";

}

if (!empty($event->changedAttributes)) {

$desc = '';

foreach($event->changedAttributes as $name => $value) {

if ($value == $event->sender->getAttribute($name)) {

continue;

}

$desc .= sprintf($log_format, $name,$value, $event->sender->getAttribute($name));

}

$desc = substr($desc, 0, -1);

} else {

$desc = '';

}

$userName = $admin_name;

$tableName = $event->sender->tableSchema->name;

$description = sprintf($description, $userName, $tableName, $event->sender->primaryKey()[0], $event->sender->getPrimaryKey(), $desc);

$log = new TbLog();

$log->admin_id = $admin_id;

$log->admin_name = $admin_name;

$log->info = $description;

$log->create_time = time();

$log->save();

}

}

可以了,只需要两步,操作时就能自动增加没个对数据库的操作日志,自行测试日志是否增加吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值