ErrorHandling   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 49
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 0%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 4
c 2
b 0
f 0
lcom 1
cbo 4
dl 0
loc 49
ccs 0
cts 30
cp 0
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 13 1
A registerErrorRenderer() 0 8 2
A registerErrorReporters() 0 13 1
1
<?php declare(strict_types = 1);
2
3
namespace Venta\Framework\Kernel\Bootstrap;
4
5
use Venta\Contracts\Debug\ErrorHandler as ErrorHandlerContract;
6
use Venta\Contracts\Debug\ErrorRenderer as ErrorRendererContract;
7
use Venta\Contracts\Debug\ErrorReporterAggregate as ErrorReporterAggregateContract;
8
use Venta\Debug\ErrorHandler;
9
use Venta\Debug\ErrorReporterAggregate;
10
use Venta\Debug\Reporter\LogErrorReporter;
11
use Venta\Framework\Debug\Renderer\ConsoleErrorRenderer;
12
use Venta\Framework\Debug\Renderer\HttpErrorRenderer;
13
use Venta\Framework\Kernel\AbstractKernelBootstrap;
14
15
/**
16
 * Class ErrorHandling
17
 *
18
 * @package Venta\Framework\Kernel\Bootstrap
19
 */
20
final class ErrorHandling extends AbstractKernelBootstrap
21
{
22
    /**
23
     * @inheritDoc
24
     */
25
    public function __invoke()
26
    {
27
        $this->container()->bind(ErrorHandlerContract::class, ErrorHandler::class);
28
29
        $this->registerErrorRenderer();
30
        $this->registerErrorReporters();
31
32
        $errorHandler = $this->container()->get(ErrorHandler::class);
33
34
        register_shutdown_function([$errorHandler, 'handleShutdown']);
35
        set_exception_handler([$errorHandler, 'handleThrowable']);
36
        set_error_handler([$errorHandler, 'handleError'], error_reporting());
37
    }
38
39
    /**
40
     * Registers the default error renderer.
41
     */
42
    private function registerErrorRenderer()
43
    {
44
        if ($this->kernel()->isCli()) {
45
            $this->container()->bind(ErrorRendererContract::class, ConsoleErrorRenderer::class);
46
        } else {
47
            $this->container()->bind(ErrorRendererContract::class, HttpErrorRenderer::class);
48
        }
49
    }
50
51
    /**
52
     * Registers default error reporters.
53
     */
54
    private function registerErrorReporters()
55
    {
56
        $this->container()->factory(
57
            ErrorReporterAggregateContract::class,
58
            function () {
59
                $reporters = new ErrorReporterAggregate($this->container());
60
                $reporters->push(LogErrorReporter::class);
61
62
                return $reporters;
63
            },
64
            true
65
        );
66
    }
67
68
}