Skip to content

Commit 9c92311

Browse files
author
Alexander Miertsch
authored
Merge pull request #16 from martin-schilling/feature/zend-problem-details
Removed the ErrorResponseGenerator in favor of zend-problem-details
2 parents 8b28444 + 4f4a26d commit 9c92311

File tree

5 files changed

+187
-71
lines changed

5 files changed

+187
-71
lines changed

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@
2929
"nikic/fast-route": "^1.0",
3030
"psr/log": "^1.0",
3131
"monolog/monolog": "^1.21",
32-
"psr/http-server-middleware": "^1.0"
32+
"psr/http-server-middleware": "^1.0",
33+
"zendframework/zend-problem-details": "^1.0"
3334
},
3435
"require-dev": {
3536
"phpunit/phpunit": "^6.0"

composer.lock

Lines changed: 159 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/index.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
$app = new \Zend\Stratigility\MiddlewarePipe();
2020

21-
$app->pipe($container->get(\Zend\Stratigility\Middleware\ErrorHandler::class));
21+
$app->pipe($container->get(\Zend\ProblemDetails\ProblemDetailsMiddleware::class));
2222

2323
$app->pipe(new \Zend\Expressive\Helper\BodyParams\BodyParamsMiddleware());
2424

src/Http/ErrorResponseGenerator.php

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

src/Service/ServiceFactory.php

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,15 @@
3030
use Prooph\EventStore\Pdo\Projection\PostgresProjectionManager;
3131
use Prooph\EventStore\Projection\ProjectionManager;
3232
use Prooph\EventStore\TransactionalActionEventEmitterEventStore;
33+
use Prooph\ServiceBus\Exception\MessageDispatchException;
3334
use Prooph\ServiceBus\Message\HumusAmqp\AmqpMessageProducer;
3435
use Psr\Container\ContainerInterface;
36+
use Psr\Http\Message\ResponseInterface;
37+
use Psr\Http\Message\ServerRequestInterface;
3538
use Psr\Log\LoggerInterface;
3639
use Zend\Diactoros\Response;
37-
use Zend\Stratigility\Middleware\ErrorHandler;
40+
use Zend\ProblemDetails\ProblemDetailsMiddleware;
41+
use Zend\ProblemDetails\ProblemDetailsResponseFactory;
3842

3943
final class ServiceFactory
4044
{
@@ -215,16 +219,30 @@ public function __invoke(Message $event): void
215219
});
216220
}
217221

218-
public function httpErrorHandler($environment = 'prod'): ErrorHandler
222+
public function problemDetailsMiddleware(): ProblemDetailsMiddleware
219223
{
220-
return $this->makeSingleton(ErrorHandler::class, function () {
221-
$errorHandler = new ErrorHandler(
222-
function () {
224+
return $this->makeSingleton(ProblemDetailsMiddleware::class, function() {
225+
$isDevEnvironment = $this->config->stringValue('environment', 'prod') === 'dev';
226+
227+
$problemDetailsResponseFactory = new class(
228+
function() {
223229
return new Response();
224230
},
225-
new ErrorResponseGenerator($this->config->stringValue('environment', 'prod') === 'dev')
226-
);
231+
$isDevEnvironment
232+
) extends ProblemDetailsResponseFactory {
233+
public function createResponseFromThrowable(
234+
ServerRequestInterface $request,
235+
\Throwable $e
236+
) : ResponseInterface {
237+
if($e instanceof MessageDispatchException) {
238+
$e = $e->getPrevious();
239+
}
240+
241+
return parent::createResponseFromThrowable($request, $e);
242+
}
243+
};
227244

245+
$errorHandler = new ProblemDetailsMiddleware($problemDetailsResponseFactory);
228246
$errorHandler->attachListener(new PsrErrorLogger($this->logger()));
229247

230248
return $errorHandler;

0 commit comments

Comments
 (0)