覆盖包含的作曲家包的特征以捕获异常/想法如何解决

问题描述 投票:0回答:0

我在基于 laravel 的应用程序中使用外部作曲家包。

我想捕获从此包抛出的异常,并记录这些异常的其他错误详细信息。

异常被抛出在特征中:

namespace Some\Package\File;

use GuzzleHttp\Client;
use GuzzleHttp\Exception\ClientException;
use GuzzleHttp\RequestOptions;
use Some\Package\Exceptions\CustomException;

trait SendHTTPRequests
{

    public function call(string $method, string $path, string $payload = '')
    {
        try {
            $response = $this->getClient()->request($method, $this->getCallableUrl($path, $query), [
                RequestOptions::BODY => $payload,
            ]);
        } catch (ClientException $e) {
            $errorPayload = json_decode((string) $e->getResponse()->getBody(), true);

            throw new CustomException(
                $e->getMessage(),
                $errorPayload['code'] ?? 0,
                $errorPayload
            );
        }

        return $response;
    }

}

如您所见,异常可以是

ClientException
(Guzzle)类型或
CustomException
类型,向消息添加额外数据的最佳方法是什么?

我应该覆盖特征还是应该在

register
Handler.php
方法中包含一个自定义“catch”并为两者抛出一个
OwnCustomException
并将我的日志逻辑包含到这个
exception
中?

我现在已经将它用于我正在使用的另一个 customPackage:

    //catch all FTPpackage exceptions
    if ((new \ReflectionClass($e))->getNamespaceName() == 'FTPUploader\Exceptions')
        throw new \App\Exceptions\OwnFTPUploaderException($e);

但是我对如何捕获类型

ClientException
的异常感到困惑,因为它们直接来自 guzzle,这肯定会造成麻烦,我不确定如何解决这个问题。

哪种方法最有意义?

laravel oop traits overwrite
© www.soinside.com 2019 - 2024. All rights reserved.