Yii2 的几个问题求教 [ 2.0 版本 ]
新入坑 Yii2,虽然会点儿 PHP,但是之前没接触过 Yii 框架,网上也找了些答案,都没有准确的解决。
1、怎么将请求参数及返回数据一并记录成 JSON 日志,这一步已经勉强实现,但是我感觉记录的时间是返回时间,而不是请求时间,我想知道怎么记录请求时间,我的实现是在 Response::EVENT_BEFORE_SEND
事件中去记录。
2、Yii2 怎么接入 opentelemetry
,最好是能记录带参数的。
3、缓存设置为 Redis,怎么手动指定 key,我现在使用的笨办法 \Yii::$app->redis->set
最佳答案
-
对于你的问题,我可以给出一些指导:
记录请求时间:你可以在请求开始时获取当前时间,并将其保存在一个变量中。然后,在Response::EVENT_BEFORE_SEND事件中获取当前时间,并计算与请求开始时间的时间差。这样你就可以记录请求的开始时间和返回时间了。以下是一个简单的示例代码:
use yii\web\Response; // 在请求开始时记录请求开始时间 $requestStartTime = microtime(true); // 注册 Response::EVENT_BEFORE_SEND 事件 \Yii::$app->response->on(Response::EVENT_BEFORE_SEND, function () use ($requestStartTime) { // 获取当前时间并计算与请求开始时间的时间差 $requestEndTime = microtime(true); $requestTime = $requestEndTime - $requestStartTime; // 将请求时间记录到日志中 \Yii::info('Request time: ' . $requestTime . ' seconds', 'application'); });
接入 opentelemetry:要在 Yii2 中接入 opentelemetry,你可以使用 OpenTelemetry PHP SDK。你需要安装相关依赖,然后按照 OpenTelemetry 的文档配置和初始化 SDK。下面是一个简单的示例:
use OpenTelemetry\Contrib\Zipkin\Exporter; use OpenTelemetry\Sdk\Trace; // 配置 Zipkin Exporter $exporter = new Exporter([ 'endpoint_url' => 'http://your-zipkin-collector-endpoint', 'service_name' => 'your-service-name', ]); // 初始化 Trace SDK $tracer = Trace::getTracerProvider()->getTracer('your-service-name'); $span = $tracer->startAndActivateSpan('your-span-name'); // 在需要追踪的地方添加自定义属性或事件 $span->setAttribute('your-attribute-key', 'your-attribute-value'); $span->addEvent('your-event-name', ['your-event-attribute-key' => 'your-event-attribute-value']); // 结束追踪 $span->end(); // 清理和导出追踪数据 \OpenTelemetry\Sdk\Trace\TracerProvider::shutdown(); $exporter->export();
你需要根据你所使用的具体追踪系统(如 Zipkin)来配置和初始化对应的 Exporter。
手动指定 Redis 缓存键名:使用 Yii2 的 Redis 缓存组件,你可以手动指定键名来进行缓存操作。以下是一个简单的示例:
$key = 'your-custom-key'; $value = 'your-value'; \Yii::$app->redis->set($key, $value);
共 1 条回复
其他 2 个回答
-
- 在接口的构造函数,或者是父类里面,记录收到请求的时间;
- 官方手册找demo:https://opentelemetry.io/docs/ ;
- 去看 Yii2 的手册,https://www.yiichina.com/doc/guide/2.0/caching-data ,里面有
$cache->set($key, $data)
,看看怎么引入 Redis 成为$cache
对象。
╃巡洋艦㊣ 觉得很赞 -
欢迎使用店滴 cms(ddiot)
店滴云,让经营场所,更智能。围绕茶室、酒店、健身房、公寓、出租房等经营性场所进行物联网改造。同时支持多种物联网通信协议,开放智能门锁,智能开关,智能手环的sdk供开发者使用。
官方地址
开发者参与
qq群
:823429313,点击可直接加入:开发者交流群
微信公众号
特性
- 使用稳定的 YII 框架,优化处理开发过程,开发体验如 tp 一样顺滑。
- 支持多层权限管控,路由权限,数据权限,菜单权限,集团权限,商户权限,扩展功能权限随意搭配调度
- 基于 swoole 协程化,定时任务调度,im 聊天环境支持,系统接口支持协程,应对高并发
- 开源百度 ai 接口对接,完成人脸库维护,人脸库创建,人脸库在线识别,人脸会员建立
- 多模块可安装,便于迅速扩展业务,支持横向纵向双向扩展业务需求
- 后台支持多种开发模式,php 混合开发,element-ui 的 vue 开发模式,纯 html 的传统开发都支持
- 表单多样,除 yii 自身的表单组件,系统还对表单做了丰富,支持一句话配置万能表单
- gii代码自动生成,包括扩展模块,数据库模型,检索模型,控制器和接口都可以自动生成
- element-ui+uniapp+店滴cms,中后台,多端兼容,数据处理全部支持且开源
环境准备:
php>=7.3 redis git 工具下载:https://git-scm.com/downloads composer https://www.phpcomposer.com/ composer建议使用阿里镜像 https://developer.aliyun.com/composer
第一步:git 下载代码
git clone https://toscode.gitee.com/wayfirer/ddicms.git
第二步:更新 composer 扩展
cd 你的文件路径 composer update
第三步:建立数据库并完成配置
cd common\config vim common\config\main-local.php
<?php /** * @Author: Wang Chunsheng 2192138785@qq.com * @Date: 2020-03-12 20:12:31 * @Last Modified by: Wang chunsheng email:2192138785@qq.com * @Last Modified time: 2021-04-09 18:25:50 */ return [ 'components' => [ 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=netos', 'username' => 'root', 'password' => 'root', 'charset' => 'utf8', 'attributes' => [ PDO::ATTR_STRINGIFY_FETCHES => false, PDO::ATTR_EMULATE_PREPARES => false, ], ], 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'viewPath' => '@common/mail', // send all mails to a file by default. You have to set // 'useFileTransport' to false and configure a transport // for the mailer to send real emails. 'useFileTransport' => true, ], ], 'language' => 'zh-CN', ]; make distclean phpize && \ ./configure --with-php-config=/www/server/php/74/bin/php-config \ --enable-openssl \ --with-openssl-dir \ --enable-swoole-curl \ --enable-http2 && \ make && sudo make install
Nginx 部署配置
首先解析网站到 frontend\web,然后配置 nginx 如下:
server { listen 80; server_name www.ai.com; root "*/firetech/frontend"; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Requested-With,Authorization,Content-Type,access-token,bloc-id,store-id; add_header Access-Control-Allow-Methods GET,POST,OPTIONS,DELETE,PUT; location /api { index index.php index.html; if (!-e $request_filename) { rewrite ^/api/(.*)$ /api/index.php last; } if (!-f $request_filename){ set $rule_0 1$rule_0; } } location /admin { index index.php index.html; if (!-e $request_filename) { rewrite ^/admin/(.*)$ /admin/index.php last; } } location / { proxy_http_version 1.1; proxy_set_header Connection "keep-alive"; proxy_set_header X-Real-IP $remote_addr; proxy_set_header SERVER_NAME $server_name; if (!-e $request_filename) { proxy_pass http://127.0.0.1:9501; } } }
特别鸣谢
感谢以下的项目,排名不分先后
EasyWechat:https://www.easywechat.com
AdminLTE:https://adminlte.io
Vue: https://vuejs.org/
vue-ele-form: https://github.com/dream2023/vue-ele-form
element-ui: https://element.eleme.cn/
Spider 广东深圳
最后登录:2023-08-01
在线时长:0小时25分
- 粉丝1
- 金钱10
- 威望0
- 积分10