neighborhoods / throwable-diagnostic-component
一个用于诊断可抛出异常的服务无关组件。
Requires
- php: ^7.0|^8.0
- ext-pdo: *
- aws/aws-sdk-php: ^3
- doctrine/dbal: ^2
- guzzlehttp/guzzle: ^7
- neighborhoods/exception-component: ^1
- psr/http-client: ^1.0
- symfony/http-client-contracts: ^2.2
Requires (Dev)
- neighborhoods/buphalo: ^1.1
- neighborhoods/dependency-injection-container-builder: ^1.1
- phpstan/extension-installer: ^1.0
- phpstan/phpstan: ^0.12.54
- phpstan/phpstan-phpunit: ^0.12.16
- phpunit/phpunit: ^9.4
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: ^3.5
Suggests
- neighborhoods/throwable-diagnostic-phpunit-component: Testing utilities
This package is auto-updated.
Last update: 2024-09-18 23:47:45 UTC
README
一个用于诊断Throwables
的服务无关组件。
ThrowableDiagnostic
可以确定一个Throwable
是否由于永久性或暂时性故障(网络问题、数据库关闭、第三方服务不可用)而发生。
默认情况下,每个Throwable
都被认为是永久的,但某些Throwables
被认为是暂时的。通过自定义诊断逻辑,可以识别出这些情况。
对于RDBMS和AWS等常见情况,提供了现成的诊断逻辑。定义自己的诊断逻辑非常简单。
安装
通过Composer
$ composer require neighborhoods/throwable-diagnostic-component
版本控制
不要混淆在packagist上的发布版本,例如3.0.0,与该包内包含的组件版本,例如AwsSqsV1。一个发布版本可能包含同一组件的多个版本。
您的代码中可能部分使用较旧版本的组件,而其他部分使用最新版本。
升级
要从版本3升级到版本4,请遵循升级指南。
用法
组件分为两类
- Throwable Diagnostic
- Throwable Diagnostic Decorator
Throwable Diagnostic定义了这种工作的核心概念。Throwable Diagnostic主要包含接口。它决定了用户代码如何诊断Throwable,装饰器的样子,以及如何定义要使用的装饰器栈。您可以将其视为一个框架/骨架/脚手架。
可能会有多个版本的throwable diagnostic,例如ThrowableDiagnosticV1和ThrowableDiagnosticV2。
Throwable Diagnostic Decorator负责诊断某些Throwables
。例如,GuzzleV1
组件有一个装饰器,用于确定来自guzzle的异常是暂时的还是不是。在诊断过程中,Throwable
可以被多个装饰器检查,每个装饰器都可能决定该Throwable
是暂时的、永久的,或者应该传递给下一个装饰器。Throwable diagnostic decorator是为Throwable Diagnostic的特定版本制作的。所有与ThrowableDiagnosticV1兼容的装饰器都放在src/ThrowableDiagnosticV1Decorators
文件夹中。
为不同的Throwables
提供了装饰器。对于某些Throwables
的诊断逻辑可能有多个版本,例如GuzzleV1、GuzzleV2。如果可能的话,请使用最新版本。这里的版本并不对应guzzle的版本,而是对应特定装饰器的版本。您可以实现自己的装饰器来正确处理特定于您自己的代码的Throwables
,或者为没有装饰器的包实现一个装饰器。
有关用法细节和预定义装饰器的列表,请参阅相应的Throwable Diagnostic版本。
Buphalo集成
Buphalo模板适用于使用throwable diagnostic、自定义throwable diagnostic decorator以及相关文件的演员。
先决条件
Buphalo模板提供在自定义模板树中。Buphalo已在版本1.1中添加了对多个模板树的支持。请确保您已安装Buphalo版本1.1或更高版本。
你可能在项目的bin文件夹中有一个脚本正在运行vendor/bin/buphalo
,并包含了所有必需的环境变量。编辑模板树目录路径的环境变量,以便包含本包中的模板树。环境变量定义可能如下所示。
Neighborhoods_Buphalo_V1_TemplateTree_Map_Builder_FactoryInterface__TemplateTreeDirectoryPaths=default:$PWD/vendor/neighborhoods/buphalo/template-tree/V1,diagnostic:$PWD/vendor/neighborhoods/throwable-diagnostic-component/template-tree/BuphaloV1
上面的export假设你没有其他自定义的模板树。