Skip to content

Commit bb3a48d

Browse files
committed
Add factory methods
1 parent d5e15c1 commit bb3a48d

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

src/Exception/HttpException.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,40 @@ public function getResponse()
4545
{
4646
return $this->response;
4747
}
48+
49+
/**
50+
* Factory method to create a new exception with a normalized error message
51+
*
52+
* @param RequestInterface $request
53+
* @param ResponseInterface $response
54+
* @param \Exception|null $previous
55+
*
56+
* @return HttpException
57+
*/
58+
public static function create(RequestInterface $request, ResponseInterface $response, \Exception $previous = null)
59+
{
60+
$code = floor($response->getStatusCode() / 100);
61+
62+
if ($code == '4') {
63+
$message = 'Client error';
64+
$className = __NAMESPACE__ . '\\ClientException';
65+
} elseif ($code == '5') {
66+
$message = 'Server error';
67+
$className = __NAMESPACE__ . '\\ServerException';
68+
} else {
69+
$message = 'Unsuccessful response';
70+
$className = __CLASS__;
71+
}
72+
73+
$message = sprintf(
74+
'%s [url] %s [http method] %s [status code] %s [reason phrase] %',
75+
$message,
76+
$request->getRequestTarget(),
77+
$request->getMethod(),
78+
$response->getStatusCode(),
79+
$response->getReasonPhrase()
80+
);
81+
82+
return new $className($message, $request, $response, $previous);
83+
}
4884
}

src/Exception/RequestException.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,19 @@ public function getRequest()
3737
{
3838
return $this->request;
3939
}
40+
41+
/**
42+
* @param RequestInterface $request
43+
* @param \Exception $e
44+
*
45+
* @return RequestException
46+
*/
47+
public static function wrapException(RequestInterface $request, \Exception $e)
48+
{
49+
if (!$e instanceof RequestException) {
50+
$e = new RequestException($e->getMessage(), $request, $e);
51+
}
52+
53+
return $e;
54+
}
4055
}

0 commit comments

Comments
 (0)