一个简单的行为案例。场景是在后台,每个用户操作了什么(也就是访问了那个链接),都会记录日志。
不多说,看代码:
在common文件夹下新建behaviors文件夹,再创建该类。
<?php
namespace common\behaviors;
use Yii;
use yii\web\Controller;
use yii\base\Behavior;
use yii\web\Request;
class LogactionBehavior extends Behavior
{
/**
* 保存注入的 yii\web\Request 实例
* @var yii\web\Request
*/
private $request;
/**
* 运用传说中的依赖注入 注入 yii\web\Request
* @param array $config
* @param yii\web\Request $request
*/
public function __construct($config =[],Request $request)
{
parent::__construct($config);
$this->request = $request;
}
/**
* 给事件设置触发函数。
* 将 beforeAction 函数注册到 Controller::EVENT_BEFORE_ACTION 事件中
* 将 afterAction 函数注册到 Controller::EVENT_AFTER_ACTION 事件中
* @return array
*/
public function events()
{
return [
Controller::EVENT_BEFORE_ACTION => 'beforeAction',
Controller::EVENT_AFTER_ACTION => 'afterAction'
];
}
/**
* 每次访问时,记录访问的情况到日志里。
*/
public function beforeAction()
{
$date =date("Y/m/d h:i:sa");
$url = $this->request->url;
$ip = $this->request->userIP;
$params = $this->request->getRawBody();
$log = $date." ".$url." ".$params." ".$ip;
Yii::info($log);
Yii::beginProfile('myBenchmark');//开启运行分析,会对数据库查询时间等信息计入日志,myBenchmark 可修改自己设定标识符,会写入日志
}
public function afterAction()
{
Yii::endProfile('myBenchmark');//结束运行分析
}
}
注释写的很清楚。
控制器中注册行为
public function behaviors()
{
return [
LogactionBehavior::className(),
];
}
配置在不同的应用配置文件中,配置components属性
'log'=>[
'targets' => [
[
'class'=> 'yii\log\FileTarget',
'levels' => ['info','profile'],
'logVars' => [],
]
]
]
指定不同的驱动,可将日志保存在不同地方。
简单用法就这样,有什么奇淫技巧大家可以一块讨论讨论。
- Yii2使用Url组件
- Yii2的Html,Request组件详解
- YII2.0框架, 多图片上传功能
- yii2-imagine配置
- 有洁癖的禁止默认YII自带垃圾代码(个人认为)、JS、CSS(新手教程)
- Yii2 API接口输出统一Json和jsonp格式方法
- MySql 创建表的一些语句释义
- Yii2联合查询(配合GridView)
- Yii 通用系统字典
- ArrayHelper的多维数组排序函数multisort,强大无比。
- 路由规则,在Url中替换使用'/'以外的符号连接
- 从excel文件中读取表格内容,并批量写入数据库
- yii2注册时验证用户名、邮箱等唯一性
- Yii2最全的实战教程
- Composer安装yii2-imagine 压缩,剪切,旋转,水印
- LinkPager增加总页数 和总记录数
- Yii2 获取模块名控制器名方法名
- Yii2使用yii2-adminlte+yii2-admin左侧菜单子路径不高亮问题又解
- 前端CSS框架
- Yii2 之 frontend 子模块实践之一:添加前后台子模块
- Yii2 之 frontend 子模块实践之二:构建子模块的独立配置
- Yii2 之 frontend 子模块实践之三:布局和语言配置
- 完美解决ajax验证码不刷新问题,让验证码更加美观,不修改任何源代码
- yii2.0 表单小部件常用的默认选中
- Yii2 controller 传值给layout
- yii2 dropDownList 二级和三级 联动写法
- 微信扫码登录 新窗口二维码 扫完关闭二维码页面 进入登录页面
- yii2 实现 "上一篇,下一篇" 功能
- Yii 行为简单应用
- SQL语句