portal.mkgtu.ru/common/modules/abiturient/controllers/ClientErrorReceiverControll...

85 lines
2.3 KiB
PHP
Raw Permalink Normal View History

2024-03-28 09:51:45 +03:00
<?php
namespace common\modules\abiturient\controllers;
use Yii;
use yii\web\Controller;
use yii\web\Response;
class ClientErrorReceiverController extends Controller
{
private const EVENT_INFO_TYPE = 'info';
private const EVENT_WARNING_TYPE = 'warning';
public function beforeAction($action)
{
$this->enableCsrfValidation = false;
return parent::beforeAction($action);
}
public function actionIndex()
{
Yii::$app->response->format = Response::FORMAT_JSON;
$errorData = Yii::$app->request->post();
$errorUrl = $errorData['url'] ?? '-';
$errorType = $errorData['type'] ?? '-';
$errorColno = $errorData['colno'] ?? '-';
$errorLineno = $errorData['lineno'] ?? '-';
$errorMessage = $errorData['message'] ?? '-';
$errorFileName = $errorData['fileName'] ?? '-';
$errorEventMessage = $errorData['errorMessage'] ?? '-';
$controllerPath = ClientErrorReceiverController::extractControllerPath($errorUrl);
if (!$errorMessage || $errorMessage == '-') {
return;
}
$message = "
Возникла ошибка на стороне клиента по причине: «{$errorMessage}»
Полная ссылка на страницу: {$errorUrl}
В файле: {$errorFileName} строка: {$errorLineno} колонка: {$errorColno}
";
if ($errorEventMessage && $errorEventMessage != '-') {
$message .= "\n\tТекст ошибки прерывания: «{$errorEventMessage}»";
}
switch ($errorType) {
case ClientErrorReceiverController::EVENT_INFO_TYPE:
Yii::info($message, "clientSide-{$controllerPath}");
break;
case ClientErrorReceiverController::EVENT_WARNING_TYPE:
Yii::warning($message, "clientSide-{$controllerPath}");
break;
default:
Yii::error($message, "clientSide-{$controllerPath}");
break;
}
}
private static function extractControllerPath(string $rawUrl = ''): string
{
return strtr(
trim(
parse_url(
$rawUrl,
PHP_URL_PATH
),
'/'
),
['/' => '.']
);
}
}