`
dcj3sjt126com
  • 浏览: 1868225 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

YII2 实现后台操作记录日志

    博客分类:
  • Yii2
log 
阅读更多

1. 创建数据表迁移脚本

2. 编辑迁移文件

3. 执行迁移

4. 操作记录日志列表显示和详情显示的MVC

5. 在具体需要记录日志的地方调用

 

1.创建数据库迁移脚本

docker-compose run --rm app ./yii migrate/create --migrationPath=@common/migrations add_admin_log_table

 

2. 编辑迁移文件

<?php

use yii\db\Schema;
use yii\db\Migration;

class m151109_101640_add_admin_log_table 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.'(11) UNSIGNED NOT NULL COMMENT "操作用户ID"',
            'admin_name'=>Schema::TYPE_STRING.'(200) NOT NULL COMMENT "操作用户名"',
            'addtime'=>Schema::TYPE_INTEGER.'(11) 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 "记录描述"',
            'controller'=>Schema::TYPE_STRING.'(200) NOT NULL COMMENT "操作模块(例:文章)"',
            'action'=>Schema::TYPE_STRING.'(200) NOT NULL COMMENT "操作类型(例:添加)"',
            'handle_id'=>Schema::TYPE_INTEGER.'(11) NOT NULL COMMENT "操作对象ID"',
            'result'=>Schema::TYPE_TEXT.' NOT NULL COMMENT "操作结果"',
            'describe'=>Schema::TYPE_TEXT.' COMMENT "备注"',

        ], $tableOptions);
    }

    public function down()
    {
        $this->dropTable('{{%admin_log}}');
    }
}

3. 执行迁移 

docker-compose run --rm app ./yii migrate --migrationPath=@common/migrations

4.  操作记录日志列表显示和详情显示的MVC

4.1 Model

<?php

namespace common\models;

use Yii;

/**
 * This is the model class for table "admin_log".
 *
 * @property integer $id
 * @property string $title
 * @property string $addtime
 * @property integer $admin_name
 * @property integer $admin_ip
 * @property integer $admin_agent
 * @property integer $controller
 * @property integer $action
 * @property integer $objId
 * @property integer $result
 */
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'=>'操作类型',
            'handle_id'=>'操作数据编号',
            'result'=>'操作结果',
        ];
    }



    public static function saveLog($result,$handle_id){
        $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->username;

        $model->controller = Yii::$app->controller->id;
        $model->action = Yii::$app->controller->action->id;
        $model->result = $result;
        $model->handle_id = $handle_id;
        $model->title =  $model->admin_name.' '.$model->action.' '.$model->controller;
        $model->save(false);

    }
}

 4.2 View admin-log/index.php

<?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>

 4.3 View admin-log/view.php

<?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',
            'handle_id',
            'result'
        ],
    ]) ?>

</div>

 4.4 Controller AdminLogController

<?php
/**
 * Created by PhpStorm.
 * User: michaeldu
 * Date: 15/11/9
 * Time: 下午6:21
 */

namespace app\controllers;


use common\models\AdminLog;
use yii\data\ActiveDataProvider;

class AdminLogController extends \yii\web\Controller
{
    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),
        ]);
    }
}

 5. 在控制器中调用日志记录

public function actionCreate()
    {
        $model = new Banner();
        $model->status=Banner::STATUS_DISPLAY;
        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            //保存操作记录
            \common\models\AdminLog::saveLog($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 后台系统可能还包括了日志记录、错误处理、API接口开发、邮件发送等功能。Yii2 的 `yii\log` 组件可以帮助记录和分析系统运行中的事件和异常,而 `yii\swiftmailer` 可以方便地发送邮件通知。API接口...

    yii2.0后台源码

    5. 日志记录:记录用户的操作行为,便于跟踪和审计。 6. 安全机制:包括CSRF(跨站请求伪造)防护、XSS(跨站脚本攻击)防护等,确保应用安全。 为了开始使用这个后台框架,你需要: 1. 安装Composer,它是PHP的...

    yii简易后台基础模板

    7. **错误处理与日志**:Yii框架内置了错误处理和日志记录机制,帮助开发者追踪和调试问题。 8. **国际化与本地化**:Yii支持多语言环境,基础模板可能已包含基础的多语言设置,便于构建支持多种语言的后台。 9. *...

    yii2-admin:Yii2基础的后台管理

    增加后台管理员操作日志记录 测试了js和css合并压缩,只是把后台各页面通用的合并了一下,生产环境下,如果第一次或者是修改了合并中引用的js或css,需要运行命令yii asset backend/assets....

    yii2 console 集成swoole 执行异步任务,例如注册邮件,发送短信

    在Web开发中,Yii2 Console组件常用于处理后台任务,如定时任务、数据迁移等。然而,对于需要即时响应或者非阻塞操作的任务,如注册邮件发送、短信通知等,我们可以利用Swoole扩展来实现异步处理,从而提高系统效率...

    yii2-webadmin.rar

    2. **日志记录**:Yii2 内置了日志组件,可以记录应用程序运行时的各种事件,帮助开发者调试和追踪问题。日志可能会被分类到不同的级别,如 info、error 或 debug,方便分析。 3. **组件化开发**:Yii2 的组件化...

    新下载的yii2,yii framework

    - **ActiveRecord**: ORM(对象关系映射)实现,允许以面向对象的方式操作数据库记录。 - **Yii Console**: 提供命令行接口,用于执行后台任务,如定时任务、迁移数据库等。 - **Caching**: 强大的缓存机制,支持...

    Yii2、miniui、mysql整合后台框架

    错误处理和日志记录则可以通过 Yii2 的内置功能或自定义组件实现,以确保系统的稳定性和可维护性。 总的来说,Yii2、MiniUI 和 MySQL 的整合为后台开发提供了一个高效且功能丰富的解决方案。Yii2 的强大功能和灵活...

    php yii2框架初始项目 源码

    8. **错误处理与日志**:利用Yii2的异常处理和日志记录功能,确保应用的稳定运行。 通过这个初始项目,开发者可以快速了解Yii2框架的架构和工作原理,同时也是一个很好的起点,可以根据需求扩展和定制功能,打造...

    管理系统系列--基于Yii2的通用后台管理系统模板.zip

    通用后台管理系统通常包含用户管理、权限控制、数据统计、日志记录等功能,适用于各种企业级应用。Yii2框架的使用意味着该模板遵循了高效的开发实践,同时具备良好的可扩展性和易维护性。 【标签】:“”(无标签)...

    基于 php 的 yii2 框架开发的一款后台管理系统源码.zip

    本系统源码是基于 Yii2 构建的后台管理系统,旨在提供一个简洁、美观且实用的管理界面,以方便管理员进行日常操作。layui 是一个流行的前端 UI 框架,它为这个后台管理系统赋予了良好的用户体验和视觉效果。 首先,...

    Yii框架学习笔记.pdf

    Yii框架提供了灵活的日志记录功能,支持多种日志路由,如文件、数据库、邮件和系统日志。开发者可以根据需要配置日志路由,以将日志信息输出到不同的目的地。 ### 国际化 1. **信息翻译**:为了使Web应用支持多...

    Yii2 RBAC 集成了用户管理模块和自写的权限管理模块,前端页面采用H+框架。-Yii2-Rbac.zip

    这个"Yii2-Rbac.zip"压缩包包含了集成用户管理模块和自定义权限管理模块的实现,前端界面采用了H+框架,这是一款流行的后台管理UI框架。 **Yii2 RBAC 知识点:** 1. **RBAC 基础**:RBAC 是一种安全策略,它通过...

    Yii框架学习笔记

    8. **日志组件**:方便的日志记录和管理,便于调试和分析应用运行状态。 在实际应用中,Yii框架可以广泛应用于各种类型的项目,例如内容管理系统(CMS)、商城系统(Shop)、办公系统(Office)和客户关系管理系统...

    yii2-advanced:Yii2 模板到初始项目

    2. **预配置**:此模板已经安装并配置了基础的扩展,例如身份验证、权限控制和日志记录,使得开发者能够快速实现基本的功能,无需从零开始设置。 3. **Yii2 管理扩展**:描述中提到的预装管理扩展可能是如 `yiisoft...

    yii2-ajaxcrud:yii2-ajaxcrud personalizado

    AjaxCRUD 扩展则是 Yii2 中的一个实用组件,通过利用 AJAX 技术,可以实现后台数据处理与前端页面的无缝连接,提高用户的操作体验。 Yii2-AjaxCRUD 的核心功能包括: 1. **自动化的 CRUD**:只需要简单的配置,...

    yii yiicms yii-cms cms

    9. **日志记录**:记录系统运行中的各种事件,帮助开发者追踪和调试问题。 10. **安全防护**:Yii框架本身就具有良好的安全防护机制,如防止SQL注入、XSS攻击等,Yii CMS在此基础上进一步强化了安全措施。 对于想...

    yii2-console:控制台应用程序的Yii2 Framework模板

    在Yii2框架中,控制台应用程序主要用来处理后台任务,如定时任务、数据迁移、队列处理等,这些任务通常不需要用户界面,而是通过命令行接口执行。 控制台应用程序的基本结构在`yii2-console-master`目录中体现。这...

Global site tag (gtag.js) - Google Analytics