Response.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. namespace App\Http\Middleware;
  3. use Closure;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\DB;
  6. /**
  7. * 数据返回中间件
  8. * Class Response
  9. * @package SocialBird\Middleware\Middleware
  10. */
  11. class Response
  12. {
  13. /**
  14. * @param Request $request
  15. * @param Closure $next
  16. * @return mixed
  17. */
  18. public function handle($request, Closure $next)
  19. {
  20. //去除请求参数左右两边空格
  21. $params = $request->all();
  22. foreach($params as $key=>$value){
  23. if(!is_array($value)) {
  24. $params[$key] = trim($value);
  25. }
  26. }
  27. $request->replace($params);
  28. if($this->mTrans($request)) {
  29. DB::beginTransaction();
  30. }
  31. $response = $next($request);
  32. if ($response->getStatusCode()==200 && empty($response->exception)) {
  33. if($this->mTrans($request)) {
  34. DB::commit();
  35. }
  36. if($request->ajax() && !($response instanceof StreamedResponse)) {
  37. // $content = $this->isJson($content) ? json_decode($content, true) : $content;
  38. $content = json_encode([
  39. 'code' => 0,
  40. 'message' => 'success.',
  41. 'data' => $response->getOriginalContent()
  42. ]);
  43. // $content = json_encode($response->getOriginalContent());
  44. // $response->setContent($content);
  45. }
  46. }else{
  47. if($this->mTrans($request)) {
  48. DB::rollBack();
  49. }
  50. if(!$request->ajax() && !($response instanceof StreamedResponse)){
  51. $content = json_decode($response->getContent(),true);
  52. $response->setContent($content['message']??'');
  53. }
  54. }
  55. if(method_exists($response,'withHeaders')){
  56. $headersArr=$response->headers->all();
  57. $withHeadersArr=[
  58. 'Access-Control-Allow-Origin'=>'*',
  59. 'Access-Control-Allow-Credentials'=>'true',
  60. 'Access-Control-Allow-Methods'=>'PUT, GET, POST, DELETE, OPTIONS',
  61. 'Access-Control-Allow-Headers' => 'Content-Type,token,X-Requested-With,Authorization',
  62. 'Access-Control-Expose-Headers' => '*'
  63. ];
  64. if(empty($headersArr['content-type'])){
  65. $withHeadersArr['Content-Type']=$request->ajax()?'application/json;charset:UTF-8':'text/html; charset=UTF-8';
  66. }
  67. $response->withHeaders($withHeadersArr);
  68. }
  69. return $response;
  70. }
  71. /**
  72. * 是否为json格式的字符串
  73. * @param $string
  74. * @return bool
  75. */
  76. private function isJson($string)
  77. {
  78. json_decode($string);
  79. return (json_last_error() == JSON_ERROR_NONE);
  80. }
  81. /**
  82. * 是否开启事务
  83. * @param Request $request
  84. * @return bool
  85. */
  86. private function mTrans($request){
  87. if(/*strtolower($request->method())!='get' && */config('database.transaction')){
  88. return true;
  89. }else{
  90. return false;
  91. }
  92. }
  93. }