vendor/codeages/web-lib/src/Error/AbstractErrorResponseHandler.php

(开头部分) 2KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

<?php

namespace Codeages\Weblib\Error;

use Codeages\Weblib\Auth\AuthException;
use Monolog\Logger;
use Monolog\Processor\WebProcessor;
use Codeages\Biz\Framework\Service\Exception\InvalidArgumentException as ServiceInvalidArgumentException;
use Codeages\Biz\Framework\Service\Exception\NotFoundException;
use Codeages\Biz\Framework\Service\Exception\ServiceException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

abstract class AbstractErrorResponseHandler
{
    protected $debug;

    /**
     * @var Logger
     */
    protected $logger;

    public function __construct($debug, Logger $logger)
    {
        $this->debug = $debug;
        $this->logger = $logger;
    }

    abstract public function handle(\Exception $e);

    public function getError(\Exception $e)
    {
        if ($e instanceof ResourceNotFoundException || $e instanceof NotFoundException) {
            $error = ['code' => ErrorCode::RESOURCE_NOT_FOUND, 'message' => $e->getMessage() ?: 'Resource Not Found.'];
            $statusCode = 404;
        } elseif ($e instanceof NotFoundHttpException) {
            $error = ['code' => ErrorCode::NOT_FOUND, 'message' => $e->getMessage() ?: 'Not Found.'];
            $statusCode = 404;
        } elseif ((($e instanceof AuthException) || ($e instanceof ResourceException) || ($e instanceof ServiceException)) && ($e->getCode() > 0)) {
            $error = ['code' => $e->getCode(), 'message' => $e->getMessage()];
            $statusCode = 400;
        } elseif ($e instanceof ServiceInvalidArgumentException || $e instanceof \InvalidArgumentException) {
            $error = ['code' => ErrorCode::INVALID_ARGUMENT, 'message' => $e->getMessage()];
            $statusCode = 422;
        } else {
            $error = ['code' => ErrorCode::SERVICE_UNAVAILABLE, 'message' => 'Service unavailable.'];
            $statusCode = 500;
        }
        $error['trace_id'] = time().'_'.substr(hash('md5', uniqid('', true)), 0, 10);

        if ($this->debug) {
            $error['detail'] = (string) $e;
        }

        if ($this->logger) {
            $logger = $this->logger;
            $logger->pushProcessor(new WebProcessor());
            $logger->pushProcessor(function ($record) use ($error) {
                $record['extra']['trace_id'] = $error['trace_id'];
                $record['extra']['http_body'] = file_get_contents('php://input');

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。