当前位置: 首页 > news >正文

Yii2项目自动向GitLab上报Bug

Yii2 项目自动上报Bug

原理

yii2在程序报错时, 会执行指定action, 通过重写ErrorAction, 实现Bug自动提交至GitLab的issue

步骤

  • 配置SiteController中的actions方法
    public function actions(){return ['error' => ['class' => 'app\helpers\web\ErrorAction',],];}
  • 重写ErrorAction, 位于app\helpers\web\ErrorAction, 并修改常量URL,PRIVATE_TOKEN和ASSIGNEE_ID

如何获取project_id和assignee_id见 WIKI

namespace app\helpers\web;use yii;
use yii\base\Action;
use yii\base\Exception;
use yii\base\UserException;
use yii\web\HttpException;class ErrorAction extends \yii\web\ErrorAction
{const URL = '{host}/api/v3/projects/{project_id}/issues'; // host替换为主机地址, project_id为项目idconst PRIVATE_TOKEN = 'tD3Te-ctECeGwEHH7-ec';const ASSIGNEE_ID = 21;public function run(){if (($exception = Yii::$app->getErrorHandler()->exception) === null) {$exception = new HttpException(404, Yii::t('yii', 'Page not found.'));}if ($exception instanceof HttpException) {$code = $exception->statusCode;} else {$code = $exception->getCode();}if ($exception instanceof Exception) {$name = $exception->getName();} else {$name = $this->defaultName ?: Yii::t('yii', 'Error');}$preCode = $code;if ($code) {$name .= " (#$code)";}if ($exception instanceof UserException) {$message = $exception->getMessage();} else {$message = $this->defaultMessage ?: Yii::t('yii', 'An internal server error occurred.');}if ($code != '404') {//自动向GitLab提交Bug$url = self::URL;$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HTTPHEADER, array('PRIVATE-TOKEN: '.self::PRIVATE_TOKEN,));curl_setopt($ch, CURLOPT_POSTFIELDS, ['title' => $message,'description' => '<blockquote>'.Yii::$app->request->getReferrer().'</blockquote>'. '<blockquote>' . Yii::$app->request->absoluteUrl . '</blockquote><br/><pre>' . $exception . '</pre>','assignee_id' => self::ASSIGNEE_ID,'labels' => '捕虫器,' . $name,]);curl_setopt($ch, CURLOPT_HEADER, false);// Pass TRUE or 1 if you want to wait for and catch the response against the request madecurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);// For Debug mode; shows up any error encountered during the operationcurl_setopt($ch, CURLOPT_VERBOSE, false);$response = curl_exec($ch);curl_close($ch);}if (Yii::$app->getRequest()->getIsAjax() || strpos($_SERVER['REQUEST_URI'], '/api/') > -1) {\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;return ['message' => $message];} else {return $this->controller->render($this->view ?: $this->id, ['name' => $name,'message' => $message,'exception' => $exception,]);}}
}

相关文章:

  • Linux-08 ubuntu 的 chrome浏览器不能使用 搜狗 输入法,但是火狐可以
  • 【MATLAB第119期】基于MATLAB的KRR多输入多输出全局敏感性分析模型运用(无目标函数,考虑代理模型)
  • 原型模式深度解析:Java设计模式实战指南与克隆机制优化实践
  • C# dll版本冲突解决方案
  • C# 使用表达式树(Expression Tree)代替反射赋值
  • 机器学习之聚类Kmeans算法
  • MongoDB 入门指南:安装、配置与 Navicat 连接教程
  • 冒泡排序C++实现
  • Linux系统部署KES
  • MySQL中text,longtext,mediumtext区别
  • CSS设置元素的宽度根据其内容自动调整
  • 如何将数据从 iPhone 传输到 Android?
  • 网页版便签应用开发:HTML5本地存储与拖拽交互实践
  • c++默认类模板参数
  • iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享
  • 黑客利用iMessage零点击漏洞攻击iPhone用户
  • 一文读懂 Docker Compose(白话版)
  • CentOS 7 部署 Samba 使用虚拟用户笔记
  • NLP学习路线图(三十五): 情感分析
  • 8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
  • seo关于网站搜索排名关键词的标准评定/网络视频营销的案例
  • 如何学做网站全套教程/东莞网站seo公司
  • 政府门户网站建设的目的和意义/网页制作用什么软件做
  • 中小企业网站建设/产品线上营销推广方案
  • 中国作风建设门户网站/整合营销传播的六种方法
  • 24小时人工客服电话/网络优化软件