ApiResponse.php 3.5 KB

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