企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
一个简单的行为案例。场景是在后台,每个用户操作了什么(也就是访问了那个链接),都会记录日志。 不多说,看代码: 在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' => [], ] ] ] 指定不同的驱动,可将日志保存在不同地方。 简单用法就这样,有什么奇淫技巧大家可以一块讨论讨论。