出于监控多用户操作后台的目的,往往需要把各个管理员操作了什么记录下来。
这个功能用yii2来实现简直是太简单了!下边上代码~
此demo基于advanced,具体功能可以参考demo 帐号demo 密码111111
1、在backend目录创建components/AdminLog.php
<?php
namespace backendcomponents;
use Yii;
use yiihelpersUrl;
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;
$model = new commonmodelsAdminLog();
$data = [
'route' => $route,
'description' => $description,
'user_id' => $userId,
'created_at' => time(),
];
$model->setAttributes($data);
$model->save();
}
}
}
2、在backend/config/main.php添加
'on beforeRequest' => function($event) {
yiiaseEvent::on(
yiidbBaseActiveRecord::className(),
yiidbBaseActiveRecord::EVENT_AFTER_UPDATE,
['backendcomponentsAdminLog', 'write']
);
},
3、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;
4、用gii生成AdminLog模型:命名空间为commonmodels