1+ <?php
2+ namespace Jnewer \ExceptionHandler \Exception ;
3+ use Webman \Http \Request ;
4+ use Webman \Http \Response ;
5+
6+ class HttpException extends \Exception{
7+ /**
8+ * @var int HTTP status code, such as 403, 404, 500, etc.
9+ */
10+ public $ statusCode ;
11+
12+ /**
13+ * Constructor.
14+ * @param int $status HTTP status code, such as 404, 500, etc.
15+ * @param string $message error message
16+ * @param int $code error code
17+ * @param \Exception $previous The previous exception used for the exception chaining.
18+ */
19+ public function __construct ($ statusCode , $ message = null , $ code = 0 , \Exception $ previous = null )
20+ {
21+ $ this ->statusCode = $ statusCode ;
22+ if (!$ message ){
23+ $ message = Response::$ _phrases [$ statusCode ] ?? '' ;
24+ }
25+
26+ parent ::__construct ($ message , $ code , $ previous );
27+ }
28+
29+ public function render (Request $ request , \Throwable $ exception ): Response
30+ {
31+ /** @var ValidationException $exception */
32+ $ message = $ exception ->validator ->errors ()->first ();
33+ if (!$ request ->expectsJson ()) {
34+ return new Response ($ exception ->statusCode , [], $ message );
35+ }
36+
37+ $ jsonMessage = ['code ' => $ exception ->code ?: $ exception ->statusCode , 'message ' => $ message , 'success ' => false , 'data ' => []];
38+ return new Response (
39+ $ exception ->statusCode ,
40+ ['Content-Type ' => 'application/json ' ],
41+ json_encode ($ jsonMessage , JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES )
42+ );
43+ }
44+
45+ }
0 commit comments