ApiResponse.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <?php
  2. namespace App\Libs;
  3. use Symfony\Component\HttpFoundation\Response as FoundationResponse;
  4. use Response;
  5. trait ApiResponse
  6. {
  7. /**
  8. * @var int
  9. */
  10. protected $statusCode = FoundationResponse::HTTP_OK;
  11. /**
  12. * @return mixed
  13. */
  14. public function getStatusCode()
  15. {
  16. return $this->statusCode;
  17. }
  18. /**
  19. * @param $statusCode
  20. * @return $this
  21. */
  22. public function setStatusCode($statusCode, $httpCode = null)
  23. {
  24. $httpCode = $httpCode ?? $statusCode;
  25. $this->statusCode = $statusCode;
  26. return $this;
  27. }
  28. /**
  29. * @param $data
  30. * @param array $header
  31. * @return mixed
  32. */
  33. public function respond($data, $header = [])
  34. {
  35. return Response::json($data, $this->getStatusCode(), $header, JSON_UNESCAPED_UNICODE);
  36. }
  37. /**
  38. * @param $status
  39. * @param array $data
  40. * @param null $code
  41. * @return mixed
  42. */
  43. public function status($status, $data, $code = null)
  44. {
  45. if ($code) {
  46. $this->setStatusCode($code);
  47. }
  48. $res = [
  49. 'msg' => $status,
  50. 'code' => 0,
  51. 'data' => $data
  52. ];
  53. return $this->respond($res);
  54. }
  55. /**
  56. * @param $message
  57. * @param int $code
  58. * @param string $status
  59. * @return mixed
  60. */
  61. /*
  62. * 格式
  63. * data:
  64. * code:422
  65. * message:xxx
  66. * status:'error'
  67. */
  68. public function failed($message, $code = FoundationResponse::HTTP_BAD_REQUEST, $status = 'error')
  69. {
  70. return $this->setStatusCode($code)->message($message, $status);
  71. }
  72. /**
  73. * @param $message
  74. * @param string $status
  75. * @return mixed
  76. */
  77. public function message($message, $status = 'success')
  78. {
  79. return $this->status($status, [
  80. 'message' => $message
  81. ]);
  82. }
  83. /**
  84. * @param string $message
  85. * @return mixed
  86. */
  87. public function internalError($message = 'Internal Error!')
  88. {
  89. return $this->failed($message, FoundationResponse::HTTP_INTERNAL_SERVER_ERROR);
  90. }
  91. /**
  92. * @param string $message
  93. * @return mixed
  94. */
  95. public function created($message = 'created')
  96. {
  97. return $this->setStatusCode(FoundationResponse::HTTP_CREATED)
  98. ->message($message);
  99. }
  100. /**
  101. * @param $data
  102. * @param $callFunc
  103. * @return mixed
  104. */
  105. public function success($data, $callFunc = [])
  106. {
  107. if ($callFunc) {
  108. return $this->status('', call_user_func($callFunc, $data));
  109. }
  110. return $this->status('', $data);
  111. }
  112. /**
  113. * @param $data
  114. * @param $callFunc
  115. * @return mixed
  116. */
  117. public function paginate($data, $callFunc = [])
  118. {
  119. $result = [
  120. 'meta' => getMeta($data),
  121. 'list' => $data->items()
  122. ];
  123. if ($callFunc) {
  124. $result['list'] = call_user_func($callFunc, $data->items());
  125. }
  126. return $this->status('', $result);
  127. }
  128. /**
  129. * @param $errorData
  130. * @param $data
  131. * @return mixed
  132. */
  133. public function error($errorData, $data = '')
  134. {
  135. // 分解错误码、错误信息
  136. $arr = explode(':', (string)$errorData);
  137. $code = (int)$arr[0];
  138. $msg = (string)$arr[1];
  139. $res = [
  140. 'msg' => $msg,
  141. 'code' => $code,
  142. 'data' => $data
  143. ];
  144. return $this->respond($res);
  145. }
  146. public function appResponse($res)
  147. {
  148. return $this->respond($res);
  149. }
  150. /**
  151. * @param string $message
  152. * @return mixed
  153. */
  154. public function notFond($message = 'Not Fond!')
  155. {
  156. return $this->failed($message, Foundationresponse::HTTP_NOT_FOUND);
  157. }
  158. }