非常简单的方法在你的后台添加《admin操作日志》的功能 [ 2.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!
yidashi
注册时间:2015-06-26
最后登录:2018-11-07
在线时长:86小时19分
最后登录:2018-11-07
在线时长:86小时19分
- 粉丝77
- 金钱10060
- 威望240
- 积分13320
共 8 条评论
怎么我按这个做的却没有数据插入数据表的?我的也是advanced
自己排查吧,帮不了你。
有人使用成功过么?
不成功?有demo地址,demo里有全部源码。不成功是连复制都不会。
$data = [ 'route' => $route, 'description' => $description, 'created_at' => time(), 'user_id' => $userId, ];
楼主,你是直接copy的吧,create_at是必填的哈。后面的朋友需要注意,楼上以指出了。
楼主,添加,删除日志怎么处理。这个貌似只能处理编辑的。。我还发现记录添加日志后,日志add,会造成不断循环~~这得怎么搞?
http://www.51siyuan.cn/2.html 这里有更新
@yidashi 学习了,赞一个
不知道怎么回事,'on beforeRequest' => function($event) { }这个不能要,要了就执行不到,然后未修改但点了几提交也要插入日志
我成功了,你们都是什么问题
on beforeRequest 在配置中要和components 同级
@aihua9930 我就是卡这儿了,感谢
$event->sender->getPrimaryKey() 获取到id数值了
yii1有快速实现方法吗
这个貌似只有编辑更新的时候有记录,添加和删除应该没有被记录