Skip to content

Commit 7109944

Browse files
primeira versão
1 parent b893c15 commit 7109944

File tree

9 files changed

+148
-60
lines changed

9 files changed

+148
-60
lines changed

config/module.config.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
return [
4+
'listeners' => [
5+
"Zend\Mvc\ErrorInterceptor\Listener\ErrorEventListener"
6+
],
7+
'service_manager' => [
8+
'factories' => [
9+
"Zend\Mvc\ErrorInterceptor\Listener\ErrorEventListener" => Zend\Mvc\ErrorInterceptor\Factory\ErrorEventListenerFactory::class
10+
]
11+
]
12+
];

src/Common/LoggerDefinition.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,13 @@ public function setFactoryName(string $factoryName)
9090
$this->factoryName = $factoryName;
9191
}
9292

93+
/**
94+
* @param Exception $exception
95+
* @return bool
96+
*/
9397
public function canLog(Exception $exception): bool
9498
{
95-
if (in_array($exception, $this->exceptions)
96-
&& !in_array($exception, $this->ignored)){
99+
if (in_array(get_class($exception), $this->exceptions) && !in_array(get_class($exception), $this->ignored)){
97100
return true;
98101
}
99102

src/Factory/ErrorEventListenerFactory.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ public function __invoke(ContainerInterface $container, $requestedName, array $o
1414
$globalConfiguration = $container->get('ApplicationConfig');
1515
$configuration = [];
1616

17-
if (array_key_exists(Configuration::ERROR_LOGGING, $globalConfiguration)){
18-
$configuration = $globalConfiguration[Configuration::ERROR_LOGGING][$requestedName];
19-
}
17+
// if (array_key_exists(Configuration::ERROR_LOGGING, $globalConfiguration)){
18+
// $configuration = $globalConfiguration[Configuration::ERROR_LOGGING];
19+
// }
2020

21-
return new $requestedName($configuration);
21+
// return new $requestedName($configuration);
22+
return new $requestedName($globalConfiguration);
2223
}
2324
}

src/Listener/ErrorEventListener.php

Lines changed: 54 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,6 @@ class ErrorEventListener extends AbstractListenerAggregate
2020
*/
2121
private $resolver;
2222

23-
/**
24-
* @var JsonErrorResponseFactoryInterface
25-
*/
26-
private $jsonErrorResponseFactory;
27-
2823
public function __construct(array $configuration)
2924
{
3025
$this->resolver = new Resolver($configuration);
@@ -66,29 +61,50 @@ public function attach(EventManagerInterface $events, $priority = 1)
6661
*/
6762
public function handleExceptionError(MvcEvent $event)
6863
{
69-
/** @var Exception $exception */
70-
$exception = $event->getParam('exception');
71-
if (!$exception){
72-
return $event;
73-
}
74-
$serviceManager = $this->getServiceManagerFromMvcEvent($event);
64+
return $this->handleError($event);
65+
}
7566

76-
$errorLogging = $this->resolver->resolveConfiguration($event);
67+
/**
68+
* @param MvcEvent $event
69+
* @return MvcEvent
70+
* @throws \Interop\Container\Exception\ContainerException
71+
* @throws \ReflectionException
72+
* @throws \Zend\Mvc\Di\Exceptions\UnsolvableDependencyException
73+
* @throws \Zend\Mvc\ErrorInterceptor\Exceptions\Logger\InvalidFactoryException
74+
* @throws \Zend\Mvc\ErrorInterceptor\Exceptions\Logger\InvalidJsonErrorResponseFactoryClassException
75+
* @throws \Zend\Mvc\ErrorInterceptor\Exceptions\Logger\InvalidLoggerClassException
76+
* @throws \Zend\Mvc\ErrorInterceptor\Exceptions\Parse\LoggerClassDefinedAndIgnoredException
77+
* @throws \Zend\Mvc\ErrorInterceptor\Exceptions\Parse\LoggerClassException
78+
* @throws \Zend\Mvc\ErrorInterceptor\Exceptions\Parse\NoExceptionClassDefined
79+
* @throws \Zend\Mvc\ErrorInterceptor\Exceptions\Parse\NoLoggerDefinitionException
80+
*/
81+
private function handleError(MvcEvent $event): MvcEvent
82+
{
83+
if ($event->isError()) {
7784

78-
foreach ($errorLogging->getLoggers() as $logger){
79-
if ($logger->canLog($exception)){
80-
/** @var Logger $loggerInstance */
81-
$loggerInstance = $serviceManager->get($logger->getClassName());
82-
$loggerInstance->info($exception->getMessage());
85+
/** @var Exception $exception */
86+
$exception = $event->getParam('exception');
87+
if (!$exception) {
88+
return $event;
8389
}
84-
}
90+
$serviceManager = $this->getServiceManagerFromMvcEvent($event);
91+
92+
$errorLogging = $this->resolver->resolveConfiguration($event);
8593

86-
$event->getResponse()->setStatusCode(400);
87-
/** @var JsonErrorResponseFactoryInterface $jsonErrorResponseFactory */
88-
$jsonErrorResponseFactory = $serviceManager->get($errorLogging->getResponse());
94+
foreach ($errorLogging->getLoggers() as $logger) {
95+
if ($logger->canLog($exception)) {
96+
/** @var Logger $loggerInstance */
97+
$loggerInstance = $serviceManager->get($logger->getClassName());
98+
$loggerInstance->info($exception->getMessage());
99+
}
100+
}
89101

90-
$event->setViewModel($jsonErrorResponseFactory->createResponse($exception->getMessage()));
102+
/** @var JsonErrorResponseFactoryInterface $jsonErrorResponseFactory */
103+
$jsonErrorResponseFactory = $serviceManager->get($errorLogging->getResponse());
91104

105+
$event->setViewModel($jsonErrorResponseFactory->createResponse($exception->getMessage()));
106+
$event->stopPropagation(true);
107+
}
92108
return $event;
93109
}
94110

@@ -102,16 +118,23 @@ private function getServiceManagerFromMvcEvent(MvcEvent $event): ServiceLocatorI
102118
return $application->getServiceManager();
103119
}
104120

105-
private function setResponse(MvcEvent $event, string $message)
121+
/**
122+
* @param MvcEvent $event
123+
* @return MvcEvent
124+
* @throws \Interop\Container\Exception\ContainerException
125+
* @throws \ReflectionException
126+
* @throws \Zend\Mvc\Di\Exceptions\UnsolvableDependencyException
127+
* @throws \Zend\Mvc\ErrorInterceptor\Exceptions\Logger\InvalidFactoryException
128+
* @throws \Zend\Mvc\ErrorInterceptor\Exceptions\Logger\InvalidJsonErrorResponseFactoryClassException
129+
* @throws \Zend\Mvc\ErrorInterceptor\Exceptions\Logger\InvalidLoggerClassException
130+
* @throws \Zend\Mvc\ErrorInterceptor\Exceptions\Parse\LoggerClassDefinedAndIgnoredException
131+
* @throws \Zend\Mvc\ErrorInterceptor\Exceptions\Parse\LoggerClassException
132+
* @throws \Zend\Mvc\ErrorInterceptor\Exceptions\Parse\NoExceptionClassDefined
133+
* @throws \Zend\Mvc\ErrorInterceptor\Exceptions\Parse\NoLoggerDefinitionException
134+
*/
135+
public function handlePhpError(MvcEvent $event)
106136
{
107-
$event->getResponse()->setStatusCode(400);
108-
137+
return $this->handleError($event);
109138
}
110139

111-
// public function handlePhpError(MvcEvent $event)
112-
// {
113-
//
114-
// return $event;
115-
// }
116-
117140
}

src/Module.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace Zend\Mvc\ErrorInterceptor;
4+
5+
class Module
6+
{
7+
public function getConfig()
8+
{
9+
return include __DIR__ . '/../config/module.config.php';
10+
}
11+
}

src/config/module.config.php

Lines changed: 0 additions & 12 deletions
This file was deleted.

tests/Common/Parse/ConfigurationParserTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
use Tests\Utils\SmsErrorLogger;
1111
use Tests\Utils\SmsErrorLoggerFactory;
1212
use Tests\Utils\TransferenciaEntreContasException;
13-
use Tests\Utils\WrongJsonErrorResponseFactory;
1413
use Zend\Mvc\ErrorInterceptor\Common\Parse\ConfigurationParser;
1514
use Zend\Mvc\ErrorInterceptor\Exceptions\Parse\LoggerClassDefinedAndIgnoredException;
1615
use Zend\Mvc\ErrorInterceptor\Exceptions\Parse\NoExceptionClassDefined;

tests/Listener/ErrorEventListenerTest.php

Lines changed: 56 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33
namespace Tests\Listener;
44

55
use PHPUnit\Framework\TestCase;
6-
use Zend\Config\Config;
7-
use Zend\EventManager\EventManager;
8-
use Zend\Http\Request;
9-
use Zend\Http\Response;
6+
use Tests\Utils\DatabaseErrorLogger;
7+
use Tests\Utils\DatabaseErrorLoggerFactory;
8+
use Tests\Utils\JsonErrorResponseFactory;
9+
use Tests\Utils\SmsErrorLogger;
10+
use Tests\Utils\SmsErrorLoggerFactory;
11+
use Tests\Utils\TransferenciaEntreContasException;
12+
use Zend\Log\Logger;
1013
use Zend\Mvc\Application;
14+
use Zend\Mvc\Exception\RuntimeException;
1115
use Zend\Mvc\MvcEvent;
12-
use Zend\ServiceManager\ServiceManager;
1316

1417
class ErrorEventListenerTest extends TestCase
1518
{
@@ -18,15 +21,58 @@ class ErrorEventListenerTest extends TestCase
1821
*/
1922
public function testWhenAnRequestWithErrorIsMade()
2023
{
24+
/** @var Logger*/
25+
$logger = null;
26+
2127
$config = [
22-
'services' => [
23-
'EventManager' => new EventManager(),
24-
'Request' => new Request(),
25-
'Response' => new Response()
28+
'modules' => [
29+
'Zend\Mvc\ErrorInterceptor',
30+
'Zend\Router',
31+
],
32+
'module_listener_options' => [],
33+
'error-logging' => [
34+
'response' => JsonErrorResponseFactory::class,
35+
'loggers' => [
36+
[
37+
'logger' => DatabaseErrorLogger::class,
38+
'factory' => DatabaseErrorLoggerFactory::class,
39+
'typeof' => [
40+
TransferenciaEntreContasException::class,
41+
\RuntimeException::class,
42+
RuntimeException::class,
43+
\Zend\View\Exception\RuntimeException::class
44+
],
45+
'ignored' => []
46+
],
47+
[
48+
'logger' => SmsErrorLogger::class,
49+
'factory' => SmsErrorLoggerFactory::class,
50+
'typeof' => [TransferenciaEntreContasException::class],
51+
'ignored' => []
52+
]
53+
]
2654
]
2755
];
2856

29-
$serviceManager = new ServiceManager($config);
3057
$application = Application::init($config);
58+
59+
$mvcEvent = new MvcEvent();
60+
$mvcEvent->setApplication($application);
61+
try {
62+
$application->run();
63+
64+
} catch (\Exception $ex) { }
65+
66+
$logger = $application->getServiceManager()->get(DatabaseErrorLogger::class);
67+
$this->assertNotNull($logger);
68+
69+
$writers = $logger->getWriters();
70+
$writer = $writers->extract();
71+
72+
$this->assertTrue(isset($writer->events[0]));
73+
$conteudo = $writer->events[0];
74+
75+
$this->assertNotNull($conteudo);
76+
3177
}
3278
}

tests/Utils/DatabaseErrorLogger.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,16 @@
33
namespace Tests\Utils;
44

55
use Zend\Log\Logger;
6+
use Zend\Log\Writer;
67

78
class DatabaseErrorLogger extends Logger
89
{
910
public function __construct(FakeAdapter $fakeAdapter)
1011
{
1112
parent::__construct(null);
13+
14+
$writer = new Writer\Mock();
15+
16+
$this->addWriter($writer);
1217
}
1318
}

0 commit comments

Comments
 (0)