scottsmith/error-handler

1.3.0 2022-05-28 21:46 UTC

This package is auto-updated.

Last update: 2024-09-29 03:00:03 UTC


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'];
                    }
                }
            }
        ]
    ],
];