YII2 实现后台操作记录日志
一、连接linux服务器,创建数据文件
php yii migrate/create user_log
二、修改数据文件
console/migrations/m150721_032220_admin_log.php
<?php use yii\db\Schema;
use yii\db\Migration; class m150721_032220_admin_log extends Migration
{
public function up()
{
$tableOptions = null;
if ($this->db->driverName === 'mysql') {
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE=InnoDB COMMENT="后台操作记录"';
} $this->createTable('{{%admin_log}}', [
//'name'=>Schema::TYPE_STRING.'(200) PRIMARY KEY NOT NULL',
'id'=>Schema::TYPE_PK,
'admin_id'=>Schema::TYPE_INTEGER.'(10) UNSIGNED NOT NULL COMMENT "操作用户ID"',
'admin_name'=>Schema::TYPE_STRING.'(200) NOT NULL COMMENT "操作用户名"',
'addtime'=>Schema::TYPE_INTEGER.'(10) NOT NULL COMMENT "记录时间"',
'admin_ip'=>Schema::TYPE_STRING.'(200) NOT NULL COMMENT "操作用户IP"',
'admin_agent'=>Schema::TYPE_STRING.'(200) NOT NULL COMMENT "操作用户浏览器代理商"',
'title'=>Schema::TYPE_STRING.'(200) NOT NULL COMMENT "记录描述"',
'model'=>Schema::TYPE_STRING.'(200) NOT NULL COMMENT "操作模块(例:文章)"',
'type'=>Schema::TYPE_STRING.'(200) NOT NULL COMMENT "操作类型(例:添加)"',
'handle_id'=>Schema::TYPE_INTEGER.'(10) NOT NULL COMMENT "操作对象ID"',
'result'=>Schema::TYPE_TEXT.' NOT NULL COMMENT "操作结果"',
'describe'=>Schema::TYPE_TEXT.' NOT NULL COMMENT "备注"', ], $tableOptions);
} public function down()
{
$this->dropTable('{{%admin_log}}');
}
}
三、根据数据文件生成数据表
php yii migrate
四、创建操作记录的控制器、模型、视图
控制器
<?php namespace backend\controllers; use backend\components\BaseController;
use common\models\AdminLog;
use yii;
use yii\data\ActiveDataProvider; class AdminLogController extends BaseController
{
public function actionIndex()
{
$dataProvider = new ActiveDataProvider([
'query' => AdminLog::find(),
'sort' => [
'defaultOrder' => [
'addtime' => SORT_DESC
]
],
]);
return $this->render('index',[
'dataProvider' => $dataProvider
]);
} public function actionView($id){
return $this->render('view',[
'model'=>AdminLog::findOne($id),
]);
} }
模型
<?php namespace common\models; use Yii; /**
* This is the model class for table "{{%article}}".
**/
class AdminLog extends \yii\db\ActiveRecord
{ /**
* @inheritdoc
*/
public static function tableName()
{
return '{{%admin_log}}';
} /**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id'=>'操作记录ID',
'title'=>'操作记录描述',
'addtime'=>'记录时间',
'admin_name'=>'操作人姓名',
'admin_ip'=>'操作人IP地址',
'admin_agent'=>'操作人浏览器代理商',
'controller'=>'操作控制器名称',
'action'=>'操作类型',
'objId'=>'操作数据编号',
'result'=>'操作结果',
];
} public static function saveLog($controller ,$action,$result,$objId){
$model = new self;
$model->admin_ip = Yii::$app->request->userIP;
$headers = Yii::$app->request->headers;
$model->addtime = time();
if ($headers->has('User-Agent')) {
$model->admin_agent = $headers->get('User-Agent');
}
$model->admin_id = Yii::$app->user->identity->id;
$model->admin_name = Yii::$app->user->identity->email; $controllers = ['article','video','collection','collection-album','category','banner','exchange','user','admin'];
if(!in_array(strtolower($controller),$controllers)) $controller = '';
$actions = ['create','update','delete','login','logout'];
if(!in_array(strtolower($action),$actions))$action = ''; $model->controller = $controller;
$model->action = $action;
$model->result = $result;
$model->objId = $objId;
$model->title = $model->admin_name.' '.$model->action.' '.$model->controller;
$model->save(false); }
}
视图
index视图 <?php use yii\grid\GridView; /* @var $this yii\web\View */
/* @var $dataProvider yii\data\ActiveDataProvider */ $this->title = '操作记录';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="handle-index"> <?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
'title',
[
'attribute'=>'addtime',
'value'=>function($model){
return date('Y-m-d H:i:s',$model->addtime);
},
],
['class' => 'yii\grid\ActionColumn','template'=>'{view}']
],
'tableOptions'=>['class' => 'table table-striped']
]); ?> </div>
view视图 <?php use yii\widgets\DetailView; /* @var $this yii\web\View */
/* @var $model backend\models\Admin */ $this->title = '操作记录: '.$model->title;
$this->params['breadcrumbs'][] = ['label' => '操作记录', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="admin-view"> <?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'admin_name',
'addtime:datetime',
'admin_ip',
'admin_agent',
'controller',
'action',
'objId',
'result'
],
]) ?> </div>
五、实现记录添加
控制器中调用 public function actionCreate()
{
$model = new Banner();
$model->status=Banner::STATUS_DISPLAY;
if ($model->load(Yii::$app->request->post()) && $model->save()) {
//保存操作记录
\common\models\AdminLog::saveLog('banner','create',$model->searchById($model->primaryKey),$model->primaryKey); Yii::$app->session->setFlash('success','Banner【'.$model->title.'】发布成功');
return $this->redirect(['index']);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
public function searchById($id){
if (($model = Banner::findOne($id)) !== null) {
return json_encode($model->toArray());
} else {
throw new \yii\web\NotFoundHttpException('The requested page does not exist.');
}
}
YII2 实现后台操作记录日志的更多相关文章
- YII2 实现后台操作记录日志(转)
一.连接linux服务器,创建数据文件 php yii migrate/create user_log 二.修改数据文件 console/migrations/m150721_032220_admin ...
- C#先执行一段sql等后台操作后再提示是否后续操作confrim
应用场景:例如选择一个单据号打击打印后先去数据库检索是否有打打印过,如果有则提示,已打印,是否再打 如果没有则不提示,直接进行打印. 实现原理:多做一个隐藏按钮去实现打印功能,页面上的打印按钮则进行数 ...
- Windows Auzre 微软的云计算产品的后台操作界面
Windows Auzre 微软的云计算产品的后台操作界面,试用期,相比于阿里云后台操作不是人. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTmFvbG ...
- log4j 配置,tomcat 启动或有后台操作时,控制台会显示很多 DEBUG 信息
log4j 配置,tomcat 启动或有后台操作时,控制台会显示很多 DEBUG 信息 日志信息可以以文件形式显示,也可以在控制台输出,在 log4j.properties 文件设置. 控制台有很多 ...
- MFC程序执行后台操作时不允许操作界面的一种方法
在使用MFC编写界面程序时,有时候会遇到像点击按钮后,后台进行大量操作后才显示处理结果这种情况,在后台处理过程中,界面不应该被允许做任何操作,这里介绍一种方法. 解决办法 点击按钮后,弹出一个模态对话 ...
- asp.net后台操作javascript:confirm返回值
在asp.net中使用confirm可以分为两种: 1.没有使用ajax,confirm会引起也面刷新 2.使用了ajax,不会刷新 A.没有使用ajax,可以用StringBuilder来完成. ( ...
- crm 系统项目(二) admin 后台操作表格
crm 系统项目(二) admin 后台操作表格 1. app下创建 templates 运行的时候 先找全局的templates——> 按照app的注册顺序找templates中的文件 2. ...
- 织梦DEDECMS本地后台操作卡顿的解决方法
打开/data/common.inc.php,把默认的$cfg_dbhost = ‘localhost‘修改为$cfg_dbhost = ‘127.0.0.1’;保存.然后你会发现后台操作起来流畅多了 ...
- solr后台操作Documents之增删改查
偶尔会用到solr后台操作一些数据,比如测试等一些情况.但具体用的时候可能会忘记,或者搜的时候结果不全,在此略详细的记一下. 1.添加 {"id":6,"title&qu ...
随机推荐
- delphi datasnap 心跳包
为了能让我们的服务程序更加稳定,有些细节问题必须解决.就如上一讲中提到的客户端拔掉网线,造成服务器上TCP变成死连接,如果死连接数量过多,对服务器能长期稳定运行是一个巨大的威胁.另外,经过测试,如果服 ...
- 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置
经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - ...
- jquery submit()不能提交表单的解决方法
<form id="form" method="get"> <input type="text" name="q ...
- JavaEE Tutorials (15) - 对Java持久化API应用使用二级缓存
15.1二级缓存概述190 15.1.1控制实体是否可以缓存19115.2指定缓存模式设置来提高性能192 15.2.1设置缓存获取和存储模式192 15.2.2通过编程方式控制二级缓存194
- Android Animation学习(二) ApiDemos解析:基本Animatiors使用
Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.ObjectAnimator.AnimatorSet ApiDemos中Animation部分是单独 ...
- 生产环境提升rman备份速度----启动块跟踪
生产环境提升rman备份速度----启动块跟踪 [环境] AIX(5300-08).oracle10g(10.2.0.1.0-64bit) [目标] 因为生产环境数据量较大,欲加快rman备份的速度 ...
- The Linux device model
/sys和 /dev的疑问 1./dev 下放的是设备文件,是由应用层mknod创建的文件.假设底层驱动对mknod的设备号有相应的驱动,如open等函数.那么应用层open "/dev/* ...
- chrome扩展小试
chorme 扩展 小试 官方文档 http://developer.chrome.com/extensions 非官方中文文档 http://docs.lmk123.com/getstarted.h ...
- HTML5入门(一)
HTML简单介绍: HTML(HyperText Markup Language),超文本标记语言,是一种专门用于创建web的超文本文档编程语言,是我们看到的网页的源代码. 版本简介: 1997年推出 ...
- JavaScript基础(简介、语法)
一.JavaScript简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司 ...