<?php namespace App\Http\Middleware; use Closure; /** * 設置一個後置中間件統一返回格式,去除null值 * * Class Response */ class Response { private $codeDefault = self::SUCCESS; private $messageDefault = self::SUCCESS_MSG; private $dataDefault = []; const SUCCESS = 200; const WARNING = 300; const ERROR = 400; const SUCCESS_MSG = '返回成功'; public function handle($request, Closure $next) { $response = $next($request); $response = $this->formatData($response->original); return response()->json($response); } /** * 格式化數據 * * @param $response * @return array */ private function formatData($response) { if (isset($response['data'])) { $response['data'] = $this->isArray($response['data']); $response['data'] = $this->nullTransform($response['data']); } $message = isset($response['message']) ? $response['message'] : $this->messageDefault; $code = isset($response['code']) ? $response['code'] : $this->codeDefault; $data = isset($response['data']) ? $response['data'] : $this->dataDefault; return ['code' => $code, 'message' => $message, 'data' => $data]; } /** * 去除null值 * * @param $response * @return mixed */ private function nullTransform($response) { $response = $this->isArray($response); array_walk_recursive($response, function (&$val) { if ($val === null) { $val = ''; } }); return $response; } /** * 判斷變量是否數組 * * @param $response * @return mixed */ private function isArray($response) { if(!is_array($response)){ return $response->toArray(); } return $response; } }