在 Yii 2.0 中设置与获取全局变量的实现(基于 Yii::$app->params)
1、现阶段存在一个需求,需要在一次接口调用中,将生成的相应操作日志,发送至中台的日志系统。中台的日志系统接口是支持同时接收多条日志记录的。因此,决定先计划将一次接口调用中,生成的 N 条操作日志,先存储至全局变量中,然后在接口调用结束时,获取全局变量中的日志记录,一次 HTTP 请求,一并发送给中台的日志系统。如图1
2、参考网址:https://www.yiiframework.com/doc/guide/2.0/zh-cn/structure-applications#params 。Yii::$app->params。如图2
3、编辑日志模板消息,配置相应的模板。编辑对应的语言包文件:common/messages/zh-CN/application.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php return [ 302200 => '新建选题【{plan_title}】' , 302201 => '启用选题【{plan_title}】' , 302202 => '禁用选题【{plan_title}】' , 302203 => '提交选题【{plan_title}】进行审核' , 302204 => '编辑选题【{plan_title}】' , 302205 => '删除选题【{plan_title}】' , 302206 => '通过选题【{plan_title}】' , 302207 => '拒绝选题【{plan_title}】' , 302208 => '指派【{plan_task_title}】{plan_task_type}给【{user_nick}】' , 302209 => '启用【{plan_task_title}】{plan_task_type}' , 302210 => '禁用【{plan_task_title}】{plan_task_type}' , 302211 => '删除【{plan_task_title}】{plan_task_type}' , 302212 => '新建【{plan_task_title}】{plan_task_type}指派给【{user_nick}】' , 302213 => '编辑【{plan_task_title}】{plan_task_type}' , 302214 => '转派【{plan_task_title}】{plan_task_type}给【{user_nick}】' , 302215 => '认领【{plan_task_title}】{plan_task_type}' , ]; |
4、将日志消息进行相应的分类,编辑:common/config/params.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php return [ 'cmcApiLogOperates' => [ //框架服务接口日志操作类型 [ 'operateKey' => 'plan_management' , //操作类型标识 'operateTitle' => '选题管理' , //操作类型名称 'codes' => [302200, 302201, 302202, 302203, 302204, 302205], //日志详情的返回码 ], [ 'operateKey' => 'plan_review' , //操作类型标识 'operateTitle' => '选题审核' , //操作类型名称 'codes' => [302206, 302207], //日志详情的返回码 ], [ 'operateKey' => 'plan_task_management' , //操作类型标识 'operateTitle' => '任务管理' , //操作类型名称 'codes' => [302208, 302209, 302210, 302211, 302212, 302213, 302214, 302215], //日志详情的返回码 ] ], ]; |
5、编写自动生成日志的全局变量的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | /** * 自动创建上报日志信息,放入(Yii::$app->params['cmcApiLogs']),为后续 HTTP 请求准备数据 * @param int $code 返回码 * @param array $data 数据,需要被替换的变量 * 格式如下: * [ * 'plan_title' => '选题名称', * ] * * @param object $identity 当前用户的身份实例 */ public static function automaticCreate( $code , $data , $identity ) { foreach (Yii:: $app ->params[ 'cmcApiLogOperates' ] as $operateValue ) { foreach ( $operateValue [ 'codes' ] as $codeValue ) { if ( $codeValue == $code ) { $operateKey = $operateValue [ 'operateKey' ]; $operateTitle = $operateValue [ 'operateTitle' ]; } } } if (isset( $operateKey ) && isset( $operateTitle )) { Yii:: $app ->params[ 'cmcApiLogs' ][] = [ 'user_token' => $identity ->user_token, 'service_key' => Yii:: $app ->params[ 'cmcApi' ][ 'serviceKey' ], 'log_type' => 'operate' , 'operate_key' => $operateKey , 'operate_title' => $operateTitle , 'log_detail' => Yii::t( 'application' , Yii::t( 'application' , Yii::t( 'application' , $code ), $data )), 'log_time' => date ( 'Y-m-d H:i:s' ), 'log_ip' => '0.0.0.0' , ]; } } |
6、在 触发 EVENT_AFTER_REQUEST 事件中判断是否存在,如果存在则打印 Yii::$app->params[‘cmcApiLogs’]。存在 2 条日志记录,可以在 触发 EVENT_AFTER_REQUEST 事件中 获取全局变量中的日志记录,一次 HTTP 请求,一并发送给中台的日志系统。如图3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | Array ( [0] => Array ( [user_token] => 3cf1c3d1db4951ad3179e1452580c0c3 [service_key] => pcs [log_type] => operate [operate_key] => plan_management [operate_title] => 选题管理 [log_detail] => 新建选题【选题 20211015 0】 [log_time] => 2021-10-15 14:02:00 [log_ip] => 0.0.0.0 ) [1] => Array ( [user_token] => 3cf1c3d1db4951ad3179e1452580c0c3 [service_key] => pcs [log_type] => operate [operate_key] => plan_management [operate_title] => 选题管理 [log_detail] => 提交选题【选题 20211015 0】进行审核 [log_time] => 2021-10-15 14:02:00 [log_ip] => 0.0.0.0 ) ) |
近期评论