Skip to content

Commit

Permalink
Merge pull request #16 from martin-schilling/feature/zend-problem-det…
Browse files Browse the repository at this point in the history
…ails

Removed the ErrorResponseGenerator in favor of zend-problem-details
  • Loading branch information
codeliner committed Jun 11, 2018
2 parents 8b28444 + 4f4a26d commit 9c92311
Show file tree
Hide file tree
Showing 5 changed files with 187 additions and 71 deletions.
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@
"nikic/fast-route": "^1.0",
"psr/log": "^1.0",
"monolog/monolog": "^1.21",
"psr/http-server-middleware": "^1.0"
"psr/http-server-middleware": "^1.0",
"zendframework/zend-problem-details": "^1.0"
},
"require-dev": {
"phpunit/phpunit": "^6.0"
Expand Down
160 changes: 159 additions & 1 deletion composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion public/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

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

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

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

Expand Down
61 changes: 0 additions & 61 deletions src/Http/ErrorResponseGenerator.php

This file was deleted.

32 changes: 25 additions & 7 deletions src/Service/ServiceFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,15 @@
use Prooph\EventStore\Pdo\Projection\PostgresProjectionManager;
use Prooph\EventStore\Projection\ProjectionManager;
use Prooph\EventStore\TransactionalActionEventEmitterEventStore;
use Prooph\ServiceBus\Exception\MessageDispatchException;
use Prooph\ServiceBus\Message\HumusAmqp\AmqpMessageProducer;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Log\LoggerInterface;
use Zend\Diactoros\Response;
use Zend\Stratigility\Middleware\ErrorHandler;
use Zend\ProblemDetails\ProblemDetailsMiddleware;
use Zend\ProblemDetails\ProblemDetailsResponseFactory;

final class ServiceFactory
{
Expand Down Expand Up @@ -215,16 +219,30 @@ public function __invoke(Message $event): void
});
}

public function httpErrorHandler($environment = 'prod'): ErrorHandler
public function problemDetailsMiddleware(): ProblemDetailsMiddleware
{
return $this->makeSingleton(ErrorHandler::class, function () {
$errorHandler = new ErrorHandler(
function () {
return $this->makeSingleton(ProblemDetailsMiddleware::class, function() {
$isDevEnvironment = $this->config->stringValue('environment', 'prod') === 'dev';

$problemDetailsResponseFactory = new class(
function() {
return new Response();
},
new ErrorResponseGenerator($this->config->stringValue('environment', 'prod') === 'dev')
);
$isDevEnvironment
) extends ProblemDetailsResponseFactory {
public function createResponseFromThrowable(
ServerRequestInterface $request,
\Throwable $e
) : ResponseInterface {
if($e instanceof MessageDispatchException) {
$e = $e->getPrevious();
}

return parent::createResponseFromThrowable($request, $e);
}
};

$errorHandler = new ProblemDetailsMiddleware($problemDetailsResponseFactory);
$errorHandler->attachListener(new PsrErrorLogger($this->logger()));

return $errorHandler;
Expand Down

0 comments on commit 9c92311

Please sign in to comment.