Skip to content

Commit 0fd4d00

Browse files
authored
Merge pull request #3 from kodus/1.0.0
add PSR-15 middleware and test: upgrades minimum PHP version to 7
2 parents f7bf2bb + 767253c commit 0fd4d00

5 files changed

+121
-10
lines changed

.travis.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
language: php
22

33
php:
4-
- 5.6
54
- 7.0
65
- 7.1
6+
- 7.2
77

88
before_script:
99
- 'composer install --prefer-source'

README.md

+10-5
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,36 @@
11
kodus/chrome-logger
22
===================
33

4-
[![PHP Version](https://img.shields.io/badge/php-5.6%2B-blue.svg)](https://packagist.org/packages/kodus/chrome-logger)
4+
[![PHP Version](https://img.shields.io/badge/php-7.0%2B-blue.svg)](https://packagist.org/packages/kodus/chrome-logger)
55
[![Build Status](https://travis-ci.org/kodus/chrome-logger.svg?branch=master)](https://travis-ci.org/kodus/chrome-logger)
66
[![Code Coverage](https://scrutinizer-ci.com/g/kodus/chrome-logger/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/kodus/chrome-logger/?branch=master)
77

8-
[PSR-3](http://www.php-fig.org/psr/psr-3/) and [PSR-7](http://www.php-fig.org/psr/psr-7/) compliant alternative
9-
to the original [ChromeLogger](https://craig.is/writing/chrome-logger) for PHP by Craig Campbell. [Because](#because).
8+
Alternative to the original [ChromeLogger](https://craig.is/writing/chrome-logger) for PHP by Craig Campbell, using:
9+
10+
* [PSR-3](http://www.php-fig.org/psr/psr-3/) compliant interface for logging,
11+
* [PSR-7](http://www.php-fig.org/psr/psr-7/) HTTP message abstraction for the models, and
12+
* [PSR-15](https://www.php-fig.org/psr/psr-15/) compliant middleware for quick integration.
1013

1114

1215
## Usage
1316

14-
It's PSR-3, so:
17+
The logging interface is PSR-3 compliant, so:
1518

1619
```php
1720
$logger = new ChromeLogger();
1821

1922
$logger->notice("awesome sauce!");
2023
```
2124

22-
Assuming you have a PSR-7 `ResponseInterface` instance, such as in a middleware stack, you can populate
25+
Using a PSR-7 compliant `ResponseInterface` instance, such as in a middleware stack, you can populate
2326
the Response as follows:
2427

2528
```php
2629
$response = $logger->writeToResponse($response);
2730
```
2831

32+
Or just add an instance of the included PSR-15 `ChromeLoggerMiddleware` to the top of your middleware stack.
33+
2934
If you're not using PSR-7, emitting the headers old-school is also possible with `ChromeLogger::emitHeader()`.
3035

3136
### Logging Table Data

composer.json

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "kodus/chrome-logger",
33
"type": "library",
4-
"description": "PSR-3 and PSR-7 compliant alternative to the original ChromeLogger for PHP",
4+
"description": "PSR-3 (logging), PSR-7 (HTTP) and PSR-15 (middleware) compliant alternative to the original ChromeLogger for PHP",
55
"license": "MIT",
66
"authors": [
77
{
@@ -16,13 +16,16 @@
1616
}
1717
],
1818
"require": {
19-
"php": ">=5.6",
19+
"php": ">=7.0",
2020
"psr/log": "^1",
21-
"psr/http-message": "^1"
21+
"psr/http-message": "^1",
22+
"psr/http-server-middleware": "^1"
2223
},
2324
"require-dev": {
2425
"codeception/codeception": "^2",
25-
"mockery/mockery": "^0.9"
26+
"mockery/mockery": "^0.9",
27+
"zendframework/zend-diactoros": "^1.8.5",
28+
"mindplay/middleman": "^3.0.3"
2629
},
2730
"autoload": {
2831
"psr-4": {

src/ChromeLoggerMiddleware.php

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
namespace Kodus\Logging;
4+
5+
use Psr\Http\Message\ResponseInterface;
6+
use Psr\Http\Message\ServerRequestInterface;
7+
use Psr\Http\Server\MiddlewareInterface;
8+
use Psr\Http\Server\RequestHandlerInterface;
9+
10+
/**
11+
* Add this to the *top* of your middleware stack - it will delegate to the rest of the
12+
* middleware stack unconditionally, then decorates the Response with ChromeLogger headers.
13+
*/
14+
class ChromeLoggerMiddleware implements MiddlewareInterface
15+
{
16+
/**
17+
* @var ChromeLogger
18+
*/
19+
private $logger;
20+
21+
/**
22+
* @param ChromeLogger $logger
23+
*/
24+
public function __construct(ChromeLogger $logger)
25+
{
26+
$this->logger = $logger;
27+
}
28+
29+
/**
30+
* Process an incoming server request and return a response, optionally delegating
31+
* response creation to a handler.
32+
*
33+
* @param ServerRequestInterface $request
34+
* @param RequestHandlerInterface $handler
35+
*
36+
* @return ResponseInterface
37+
*/
38+
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
39+
{
40+
$response = $handler->handle($request);
41+
42+
return $this->logger->writeToResponse($response);
43+
}
44+
}
+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
namespace Kodus\Logging\Test\Unit;
4+
5+
use Kodus\Logging\ChromeLogger;
6+
use Kodus\Logging\ChromeLoggerMiddleware;
7+
use mindplay\middleman\Dispatcher;
8+
use Psr\Http\Message\ResponseInterface;
9+
use Psr\Http\Message\ServerRequestInterface;
10+
use Psr\Http\Server\MiddlewareInterface;
11+
use Psr\Http\Server\RequestHandlerInterface;
12+
use UnitTester;
13+
use Zend\Diactoros\Response\TextResponse;
14+
use Zend\Diactoros\ServerRequest;
15+
16+
class MockMiddleware implements MiddlewareInterface
17+
{
18+
/**
19+
* @var ChromeLogger
20+
*/
21+
private $logger;
22+
23+
public function __construct(ChromeLogger $logger)
24+
{
25+
$this->logger = $logger;
26+
}
27+
28+
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
29+
{
30+
$this->logger->notice("running mock middleware");
31+
32+
return new TextResponse("Hello");
33+
}
34+
}
35+
36+
class ChromeLoggerMiddlewareCest
37+
{
38+
public function logDuringMiddlewareDispatch(UnitTester $I)
39+
{
40+
$logger = new ChromeLogger();
41+
42+
$logger_middleware = new ChromeLoggerMiddleware($logger);
43+
44+
$mock_middleware = new MockMiddleware($logger);
45+
46+
$dispatcher = new Dispatcher([
47+
$logger_middleware,
48+
$mock_middleware
49+
]);
50+
51+
$response = $dispatcher->dispatch(new ServerRequest());
52+
53+
$header = $response->getHeaderLine(ChromeLogger::HEADER_NAME);
54+
55+
$data = json_decode(base64_decode($header), true);
56+
57+
$I->assertSame([[["running mock middleware"], "info"]], $data["rows"]);
58+
}
59+
}

0 commit comments

Comments
 (0)