From c5896cd47add54b04242efcfc954a42464c61342 Mon Sep 17 00:00:00 2001 From: Witold Wasiczko Date: Thu, 11 May 2017 19:52:07 +0200 Subject: [PATCH 1/4] Use double-pass-compatibility --- composer.json | 3 ++- src/LogMiddleware.php | 21 +++++---------------- 2 files changed, 7 insertions(+), 17 deletions(-) diff --git a/composer.json b/composer.json index 3606221..1f88730 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,8 @@ "psr/log": "^1.0", "psr/http-message": "^1.0", "zendframework/zend-diactoros": "^1.4", - "http-interop/http-middleware": "^0.4.1" + "http-interop/http-middleware": "^0.4.1", + "php-middleware/double-pass-compatibility": "^1.0" }, "require-dev": { "phpunit/phpunit": "^6.1" diff --git a/src/LogMiddleware.php b/src/LogMiddleware.php index 08cdc00..a95f3e5 100644 --- a/src/LogMiddleware.php +++ b/src/LogMiddleware.php @@ -6,6 +6,7 @@ use Interop\Http\ServerMiddleware\DelegateInterface; use Interop\Http\ServerMiddleware\MiddlewareInterface; +use PhpMiddleware\DoublePassCompatibilityTrait; use PhpMiddleware\LogHttpMessages\Formatter\ResponseFormatter; use PhpMiddleware\LogHttpMessages\Formatter\ServerRequestFormatter; use Psr\Http\Message\ResponseInterface as Response; @@ -15,6 +16,8 @@ final class LogMiddleware implements MiddlewareInterface { + use DoublePassCompatibilityTrait; + const LOG_MESSAGE = 'Request/Response'; private $logger; @@ -37,26 +40,10 @@ public function __construct( $this->logMessage = $logMessage; } - public function __invoke(ServerRequest $request, Response $response, callable $next) : Response - { - $outResponse = $next($request, $response); - - $this->logMessages($request, $outResponse); - - return $outResponse; - } - public function process(ServerRequest $request, DelegateInterface $delegate) : Response { $response = $delegate->process($request); - $this->logMessages($request, $response); - - return $response; - } - - private function logMessages(ServerRequest $request, Response $response) - { $formattedRequest = $this->requestFormatter->formatServerRequest($request); $formattedResponse = $this->responseFormatter->formatResponse($response); @@ -64,5 +51,7 @@ private function logMessages(ServerRequest $request, Response $response) 'request' => $formattedRequest->getValue(), 'response' => $formattedResponse->getValue(), ]); + + return $response; } } From 0dbc4a5f91ba7306889aeba97bc8f325e508fcf0 Mon Sep 17 00:00:00 2001 From: Krzysztof Gardziejewski Date: Fri, 16 Nov 2018 19:07:59 +0100 Subject: [PATCH 2/4] Support zend-diacrotos v2 --- .travis.yml | 1 + composer.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a7f1afe..23364b9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,7 @@ language: php php: - 7.0 - 7.1 + - 7.2 env: - COMPOSER_FLAGS=--prefer-lowest diff --git a/composer.json b/composer.json index 1f88730..f47643a 100644 --- a/composer.json +++ b/composer.json @@ -16,7 +16,7 @@ "php": ">=7.0", "psr/log": "^1.0", "psr/http-message": "^1.0", - "zendframework/zend-diactoros": "^1.4", + "zendframework/zend-diactoros": "^1.4 || ^2.0", "http-interop/http-middleware": "^0.4.1", "php-middleware/double-pass-compatibility": "^1.0" }, From f5b2a9fe282d46294d896f9bf5a03cc2ce970b12 Mon Sep 17 00:00:00 2001 From: Krzysztof Gardziejewski Date: Sat, 17 Nov 2018 10:05:15 +0100 Subject: [PATCH 3/4] Added support PSR-15 middleware Dropped support http-interop/http-middleware --- composer.json | 6 ++-- src/LogMiddleware.php | 12 ++++---- test/LogMiddlewareTest.php | 60 ++++++++++---------------------------- 3 files changed, 24 insertions(+), 54 deletions(-) diff --git a/composer.json b/composer.json index f47643a..813df82 100644 --- a/composer.json +++ b/composer.json @@ -16,9 +16,9 @@ "php": ">=7.0", "psr/log": "^1.0", "psr/http-message": "^1.0", - "zendframework/zend-diactoros": "^1.4 || ^2.0", - "http-interop/http-middleware": "^0.4.1", - "php-middleware/double-pass-compatibility": "^1.0" + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "zendframework/zend-diactoros": "^1.4 || ^2.0" }, "require-dev": { "phpunit/phpunit": "^6.1" diff --git a/src/LogMiddleware.php b/src/LogMiddleware.php index a95f3e5..2ba6ee4 100644 --- a/src/LogMiddleware.php +++ b/src/LogMiddleware.php @@ -4,20 +4,17 @@ namespace PhpMiddleware\LogHttpMessages; -use Interop\Http\ServerMiddleware\DelegateInterface; -use Interop\Http\ServerMiddleware\MiddlewareInterface; -use PhpMiddleware\DoublePassCompatibilityTrait; use PhpMiddleware\LogHttpMessages\Formatter\ResponseFormatter; use PhpMiddleware\LogHttpMessages\Formatter\ServerRequestFormatter; use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as ServerRequest; +use Psr\Http\Server\MiddlewareInterface; +use Psr\Http\Server\RequestHandlerInterface; use Psr\Log\LoggerInterface as Logger; use Psr\Log\LogLevel; final class LogMiddleware implements MiddlewareInterface { - use DoublePassCompatibilityTrait; - const LOG_MESSAGE = 'Request/Response'; private $logger; @@ -40,9 +37,10 @@ public function __construct( $this->logMessage = $logMessage; } - public function process(ServerRequest $request, DelegateInterface $delegate) : Response + /** @inheritdoc */ + public function process(ServerRequest $request, RequestHandlerInterface $handler): Response { - $response = $delegate->process($request); + $response = $handler->handle($request); $formattedRequest = $this->requestFormatter->formatServerRequest($request); $formattedResponse = $this->responseFormatter->formatResponse($response); diff --git a/test/LogMiddlewareTest.php b/test/LogMiddlewareTest.php index 68af43b..cf0596a 100644 --- a/test/LogMiddlewareTest.php +++ b/test/LogMiddlewareTest.php @@ -2,73 +2,45 @@ namespace PhpMiddlewareTest\LogHttpMessages; -use Interop\Http\ServerMiddleware\DelegateInterface; use PhpMiddleware\LogHttpMessages\Formatter\EmptyMessageFormatter; use PhpMiddleware\LogHttpMessages\LogMiddleware; +use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Server\RequestHandlerInterface; use Psr\Log\LoggerInterface; use Psr\Log\LogLevel; class LogMiddlewareTest extends TestCase { + /** @var LogMiddleware */ private $middleware; + /** @var LoggerInterface|MockObject */ private $logger; - private $request; - private $response; - private $next; - private $level; - private $delegate; - private $nextResponse; + private $handler; protected function setUp() { - $this->request = $this->createMock(ServerRequestInterface::class); - $this->response = $this->createMock(ResponseInterface::class); - $this->nextResponse = clone $this->response; - $this->next = function () { - return $this->nextResponse; - }; - $this->delegate = $this->createMock(DelegateInterface::class); - $this->delegate->method('process')->willReturn($this->nextResponse); + $response = $this->createMock(ResponseInterface::class); + + $this->handler = $this->createMock(RequestHandlerInterface::class); + $this->handler->method('handle')->willReturn($response); $formatter = new EmptyMessageFormatter(); $this->logger = $this->createMock(LoggerInterface::class); - $this->level = LogLevel::ALERT; - $this->middleware = new LogMiddleware($formatter, $formatter, $this->logger, $this->level); + $this->middleware = new LogMiddleware($formatter, $formatter, $this->logger, LogLevel::ALERT); } - /** - * @dataProvider middlewareProvider - */ - public function testLogFormattedMessages($middlewareExecutor) + public function testLogFormattedMessages() { - $this->logger->expects($this->once())->method('log')->with($this->level, LogMiddleware::LOG_MESSAGE, ['request' => null, 'response' => null]); - - $middlewareExecutor($this); - } + /** @var ServerRequestInterface|MockObject $request */ + $request = $this->createMock(ServerRequestInterface::class); - public function middlewareProvider() - { - return [ - 'double pass' => [function ($test) { - return $test->executeDoublePassMiddleware(); - }], - 'single pass' => [function ($test) { - return $test->executeSinglePassMiddleware(); - }], - ]; - } + $this->logger->expects($this->once())->method('log') + ->with(LogLevel::ALERT, LogMiddleware::LOG_MESSAGE, ['request' => null, 'response' => null]); - protected function executeDoublePassMiddleware() - { - return call_user_func($this->middleware, $this->request, $this->response, $this->next); - } - - protected function executeSinglePassMiddleware() - { - return $this->middleware->process($this->request, $this->delegate); + $this->middleware->process($request, $this->handler); } } From 3c1b0bf70fbbbdd39944a047bafffce0dd98d573 Mon Sep 17 00:00:00 2001 From: Witold Wasiczko Date: Sat, 17 Nov 2018 11:14:08 +0100 Subject: [PATCH 4/4] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index e8dc37c..e3379b2 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ PSR-15 middleware for log PSR-7 HTTP messages using PSR-3 logger This middleware provide framework-agnostic possibility to log request and response messages to PSR-3 logger. -Support double and single (PSR-15) pass middleware. ## Installation