handleResponse($request, $next($request)); } /** * 处理响应 * * @param \Illuminate\Http\Request $request * @param \Symfony\Component\HttpFoundation\Response $response * @return \Symfony\Component\HttpFoundation\Response */ protected function handleResponse(Request $request, Response $response): Response { if ($response instanceof JsonResponse) { $response = $this->handleJsonResponse($response); } elseif (! $response instanceof RedirectResponse && $request->expectsJson()) { $response = new JsonResponse( $this->wrapJson( ! $response->isEmpty() ? ['data' => $response->getContent()] : null ) ); $response->prepare($request); } return $response; } /** * 处理 JSON 响应 * * @param \Symfony\Component\HttpFoundation\JsonResponse $response * @return \Symfony\Component\HttpFoundation\JsonResponse */ protected function handleJsonResponse(JsonResponse $response): JsonResponse { return $response->setData( $this->wrapJson( json_decode($response->getContent()) ) ); } /** * 组装 JSON 数据 * * @param mixed $data * @return array */ protected function wrapJson($data): array { $value = is_object($data) ? (array) $data : $data; if (is_array($value) && Arr::hasAny($value, ['code', 'data', 'message'])) { $data = $value; } else { $data = ['data' => $data]; } return array_merge([ 'code' => 0, 'data' => null, 'message' => 'ok', ], $data); } }