scottsmith / error-handler
错误/异常处理器
Requires
- php: ^7.4|^8.0
- ext-openssl: *
Suggests
- bugsnag/bugsnag-laravel: Allows to use the error-handler's Bugsnag reporter
README
安装
composer require scottsmith/error-handler
配置
要使报告器工作,需要设置两件事。
- 报告器
- 使用基础处理器
报告器
支持两种报告器
- NullReporter
- LaravelBugsnagReporter
BugsnagReporter 扩展了 AbstractReporter
。这允许扩展元数据
$reporter->registerMetaGenerator(new class implements MetaGeneratorInterface {
public function generateMetaData(): array
{
return ['some' => 'data'];
}
}
Laravel 集成
配置
您需要使用 php artisan vendor:publish
命令发布配置。
这允许更新 ModuleServiceProvider 绑定的 ReporterInterface 报告器。
要使用 bugsnag 报告器,您需要安装并设置 bugsnag/bugsnag-laravel
包。
app\Exceptions\Handler.php
需要扩展 ScottSmith\ErrorHandler\Integration\Laravel\Handler
类。
默认情况下,要使用的报告器是 ScottSmith\ErrorHandler\Reporter\NullReporter
。要更新报告器,只需更新已发布的配置 config\error-handler.php
'reporter' => \ScottSmith\ErrorHandler\Reporter\LaravelBugsnagReporter::class,
如果报告器扩展了 AbstractReporter
,那么您可以在 Provider 中扩展全局数据
class AppServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->extend(\ScottSmith\ErrorHandler\Reporter\AbstractReporter::class, function($reporter) {
$reporter->registerMetaGenerator(new class implements MetaGeneratorInterface {
public function generateMetaData(): array
{
return ['some' => 'data'];
}
}
});
}
}
Laminas/Mezzio 集成
配置
如果您正在使用 laminas-component-installer
,则应自动添加模块 ConfigProvider
。如果没有,则您需要手动添加 ScottSmith\ErrorHandler\Integration\Mezzio\ConfigProvider
。例如,config.php
$aggregator = new ConfigAggregator(
[
\ScottSmith\ErrorHandler\Integration\Laminas\ConfigProvider::class
...
]
);
然后您需要为服务管理器创建配置。本 README 只涵盖 laminas 服务管理器。创建一个名为 config\autoload\error.global.php
的文件
<?php
use Mezzio\Middleware\ErrorResponseGenerator;
use ScottSmith\ErrorHandler\Integration\Laminas\ErrorResponseGeneratorFactory;
return [
'dependencies' => [
'factories' => [
ErrorResponseGenerator::class => ErrorResponseGeneratorFactory::class,
],
],
'error_handler' => [
// Is the application in debug mode
'debug' => false,
// Which reporter to use
'reporter' => \ScottSmith\ErrorHandler\Reporter\LoggerReporter::class,
// The templates to use if you have initialized templating with Mezzio\Template\TemplateRendererInterface
'template_404' => 'error::404',
'template_error' => 'error::error',
],
];
如果报告器扩展了 AbstractReporter
,那么您可以在 Provider 中扩展全局数据
<?php
use Mezzio\Middleware\ErrorResponseGenerator;
use ScottSmith\ErrorHandler\Integration\Laminas\ErrorResponseGeneratorFactory;
return [
'dependencies' => [
'initializers' => [
function(ContainerInterface $container, $instance) {
if (!$instance instanceof \ScottSmith\ErrorHandler\Reporter\AbstractReporter) {
return;
}
$instance->registerMetaGenerator(new class implements MetaGeneratorInterface {
public function generateMetaData(): array
{
return ['some' => 'data'];
}
}
}
]
],
];