Skip to content

Commit 0f48b45

Browse files
committed
Merge branch 'php7error'
2 parents 9357705 + 86ffc09 commit 0f48b45

9 files changed

Lines changed: 79 additions & 64 deletions

File tree

spec/Integration/IntegrationViaErrorPreviewActionMiddlewareForXmlHttpRequestSpec.php

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
Quit::disable();
8282

8383
$serverRequest = new ServerRequest([], [], '/error-preview', 'GET');
84-
$serverRequest = $serverRequest->withHeader('X_REQUESTED_WITH', 'XMLHttpRequest');
84+
$serverRequest = $serverRequest->withHeader('X-Requested-With', 'XMLHttpRequest');
8585

8686
ob_start();
8787
$closure = function () use ($serverRequest) {
@@ -99,39 +99,9 @@
9999
}
100100
json
101101
);
102-
103-
});
104-
105-
});
106-
107-
describe('/error-preview/error', function() {
108-
109-
it('show error page', function() {
110-
111-
Quit::disable();
112-
113-
$serverRequest = new ServerRequest([], [], '/error-preview/error', 'GET');
114-
$serverRequest = $serverRequest->withHeader('X_REQUESTED_WITH', 'XMLHttpRequest');
115-
116-
ob_start();
117-
$closure = function () use ($serverRequest) {
118-
$this->app->run($serverRequest);
119-
};
120-
expect($closure)->toThrow(new QuitException('Exit statement occurred', -1));
121-
$content = ob_get_clean();
122-
123-
expect($content)->toBe(<<<json
124-
{
125-
"type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html",
126-
"title": "Internal Server Error",
127-
"status": 500,
128-
"detail": "We have encountered a problem and we can not fulfill your request. An error report has been generated and send to the support team and someone will attend to this problem urgently. Please try again later. Thank you for your patience."
129-
}
130-
json
131-
);
132-
133102

134103
});
104+
135105
});
136106

137107
});

spec/Integration/IntegrationViaErrorPreviewActionMiddlewareSpec.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,28 @@
112112
expect($content)->toContain('<p>We have encountered a problem and we can not fulfill your request');
113113

114114
});
115+
116+
});
117+
118+
describe('/error-preview/php7error', function() {
119+
120+
it('show error page', function() {
121+
122+
Quit::disable();
123+
124+
$serverRequest = new ServerRequest([], [], '/error-preview/php7error', 'GET');
125+
126+
ob_start();
127+
$closure = function () use ($serverRequest) {
128+
$this->app->run($serverRequest);
129+
};
130+
expect($closure)->toThrow(new QuitException('Exit statement occurred', -1));
131+
$content = ob_get_clean();
132+
133+
expect($content)->toContain('<p>We have encountered a problem and we can not fulfill your request');
134+
135+
});
136+
115137
});
116138

117139
});

spec/Middleware/ExpressiveSpec.php

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@
55
use ErrorHeroModule\Handler\Logging;
66
use ErrorHeroModule\Middleware\Expressive;
77
use Kahlan\Plugin\Double;
8-
use Psr\Http\Message\ResponseInterface;
9-
use Psr\Http\Message\ServerRequestInterface;
108
use Zend\Console\Console;
119
use Zend\Diactoros\Response;
10+
use Zend\Diactoros\ServerRequest;
1211
use Zend\Expressive\Template\TemplateRendererInterface;
1312
use Zend\Http\PhpEnvironment\Request;
1413

@@ -88,8 +87,8 @@
8887

8988
$config['enable'] = false;
9089

91-
$request = Double::instance(['implements' => ServerRequestInterface::class]);
92-
$response = Double::instance(['implements' => ResponseInterface::class]);
90+
$request = new ServerRequest();
91+
$response = new Response();
9392
$next = function ($request, $response) {
9493
return new Response();
9594
};
@@ -102,8 +101,8 @@
102101

103102
it('returns next() when no error', function () {
104103

105-
$request = Double::instance(['implements' => ServerRequestInterface::class]);
106-
$response = Double::instance(['implements' => ResponseInterface::class]);
104+
$request = new ServerRequest();
105+
$response = new Response();
107106
$next = function ($request, $response) {
108107
return new Response();
109108
};

spec/Middleware/Routed/Preview/ErrorPreviewActionSpec.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,24 @@
4848

4949
});
5050

51+
it('PHP7 Error', function() {
52+
53+
skipIf(PHP_MAJOR_VERSION < 7);
54+
55+
try {
56+
$request = Double::instance(['implements' => ServerRequestInterface::class]);
57+
allow($request)->toReceive('getAttribute')->with('action', 'exception')->andReturn('php7error');
58+
59+
$response = Double::instance(['implements' => ResponseInterface::class]);
60+
$next = function ($request, $response) {};
61+
62+
$this->middleware->__invoke($request, $response, $next);
63+
} catch (\Throwable $error) {
64+
expect($error)->toBeAnInstanceOf(\Throwable::class);
65+
}
66+
67+
});
68+
5169
});
5270

5371
});

src/Handler/Logging.php

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
use Error;
66
use ErrorException;
77
use Exception;
8+
use Psr\Http\Message\ServerRequestInterface;
89
use RuntimeException;
9-
use Zend\Diactoros\ServerRequest;
1010
use Zend\Http\PhpEnvironment\Request as HttpRequest;
1111
use Zend\Log\Logger;
1212
use Zend\Log\Writer\Db;
@@ -28,7 +28,7 @@ class Logging
2828
private $serverUrl;
2929

3030
/**
31-
* @var RequestInterface|ServerRequest
31+
* @var RequestInterface|ServerRequestInterface
3232
*/
3333
private $request;
3434

@@ -68,14 +68,14 @@ class Logging
6868
private $emailSender;
6969

7070
/**
71-
* @param Logger $logger
72-
* @param string $serverUrl
73-
* @param string $requestUri
74-
* @param RequestInterface|ServerRequest $request
75-
* @param array $errorHeroModuleLocalConfig
76-
* @param array $logWritersConfig
77-
* @param Message|null $mailMessageService
78-
* @param TransportInterface|null $mailMessageTransport
71+
* @param Logger $logger
72+
* @param string $serverUrl
73+
* @param string $requestUri
74+
* @param RequestInterface|ServerRequestInterface $request
75+
* @param array $errorHeroModuleLocalConfig
76+
* @param array $logWritersConfig
77+
* @param Message|null $mailMessageService
78+
* @param TransportInterface|null $mailMessageTransport
7979
*/
8080
public function __construct(
8181
Logger $logger,
@@ -102,9 +102,9 @@ public function __construct(
102102
/**
103103
* Set ServerRequest for expressive
104104
*
105-
* @param ServerRequest $request
105+
* @param ServerRequestInterface $request
106106
*/
107-
public function setServerRequestandRequestUri(ServerRequest $request)
107+
public function setServerRequestandRequestUri(ServerRequestInterface $request)
108108
{
109109
$this->request = $request;
110110
$this->requestUri = $request->getUri()->getPath();
@@ -167,7 +167,7 @@ private function getRequestData()
167167
];
168168
}
169169

170-
if ($this->request instanceof ServerRequest) {
170+
if ($this->request instanceof ServerRequestInterface) {
171171
$query = $this->request->getQueryParams();
172172
$request_method = $this->request->getMethod();
173173
$body_data = ($this->request->getMethod() === 'POST')

src/HeroTrait.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public function phpErrorHandler($errorType, $errorMessage, $errorFile, $errorLin
8989
}
9090

9191
if (! $errorExcluded) {
92-
$this->showDefaultViewWhenDisplayErrorSetttingIsDisabled($this->request);
92+
$this->showDefaultViewWhenDisplayErrorSetttingIsDisabled();
9393
}
9494
}
9595
}

src/Listener/Mvc.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,10 @@ public function exceptionError(Event $e)
8989
/**
9090
* It show default view if display_errors setting = 0.
9191
*
92-
* @param mixed|null $request
9392
*
9493
* @return void
9594
*/
96-
private function showDefaultViewWhenDisplayErrorSetttingIsDisabled($request = null)
95+
private function showDefaultViewWhenDisplayErrorSetttingIsDisabled()
9796
{
9897
$displayErrors = $this->errorHeroModuleConfig['display-settings']['display_errors'];
9998
if ($displayErrors) {

src/Middleware/Expressive.php

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,24 +42,28 @@ public function __invoke(ServerRequestInterface $request, ResponseInterface $res
4242
}
4343

4444
try {
45-
$response = $next($request, $response);
46-
$this->phpError($request);
45+
$this->request = $request;
46+
$this->logging->setServerRequestandRequestUri($request);
47+
48+
$this->phpError();
49+
50+
$response = $next($request, $response);
51+
4752

4853
return $response;
54+
} catch (Error $e) {
55+
$this->exceptionError($e, $request);
4956
} catch (Exception $e) {
5057
$this->exceptionError($e, $request);
5158
}
5259
}
5360

5461
/**
55-
* @param ServerRequestInterface $request
5662
*
5763
* @return void
5864
*/
59-
public function phpError(ServerRequestInterface $request)
65+
public function phpError()
6066
{
61-
$this->request = $request;
62-
6367
register_shutdown_function([$this, 'execOnShutdown']);
6468
set_error_handler([$this, 'phpErrorHandler']);
6569
}
@@ -71,20 +75,19 @@ public function phpError(ServerRequestInterface $request)
7175
*/
7276
public function exceptionError($e, $request)
7377
{
74-
$this->logging->setServerRequestandRequestUri($request);
7578
$this->logging->handleException(
7679
$e
7780
);
7881

79-
$this->showDefaultViewWhenDisplayErrorSetttingIsDisabled($request);
82+
$this->showDefaultViewWhenDisplayErrorSetttingIsDisabled();
8083
}
8184

8285
/**
8386
* It show default view if display_errors setting = 0.
8487
*
8588
* @return void
8689
*/
87-
private function showDefaultViewWhenDisplayErrorSetttingIsDisabled($request)
90+
private function showDefaultViewWhenDisplayErrorSetttingIsDisabled()
8891
{
8992
$displayErrors = $this->errorHeroModuleConfig['display-settings']['display_errors'];
9093
if ($displayErrors) {
@@ -94,7 +97,7 @@ private function showDefaultViewWhenDisplayErrorSetttingIsDisabled($request)
9497
$response = new Response();
9598
$response = $response->withStatus(500);
9699

97-
$isXmlHttpRequest = $request->hasHeader('X_REQUESTED_WITH');
100+
$isXmlHttpRequest = $this->request->hasHeader('X-Requested-With');
98101

99102
if ($isXmlHttpRequest === true &&
100103
isset($this->errorHeroModuleConfig['display-settings']['ajax']['message'])

src/Middleware/Routed/Preview/ErrorPreviewAction.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ public function __invoke(ServerRequestInterface $request, ResponseInterface $res
1515
throw new \Exception('a sample error preview');
1616
}
1717

18+
if ($action === 'php7error' && class_exists(\Error::class)) {
19+
throw new \Error('error of php 7');
20+
}
21+
1822
$array = [];
1923
$array[1]; // E_NOTICE
2024
}

0 commit comments

Comments
 (0)