Laravel函数返回异常:预期返回ID却得到RedirectResponse
Laravel函数返回异常问题
调用getReservationByDate函数时,预期返回匹配指定日期的预订ID,但实际得到Illuminate\Http\RedirectResponse。在return $idToReturn前添加dd($idToReturn)能输出正确的ID值,但函数仍返回重定向响应。
调用代码
public function updateReservationAPI(Booking $booking) { try { $idReturned = $this->getReservationByDate($booking->arrival); } catch (\Exception $e) { dd("Error on API call: " . $e->getMessage()); } }
函数实现代码
private function getReservationByDate($date, $page = 1) { $dateParam = Carbon::parse($date); $url = "https://api.site.url/api/reservations"; $nextPage = ""; if (Session::has('access_token')) { $client = new Client(); $response = $client->get($url, [ 'headers' => [ 'Authorization' => 'JWT ' . Session::get('access_token'), ], 'query' => [ 'page' => $page, ], ]); $statusCode = $response->getStatusCode(); if ($statusCode === 200) { $body = $response->getBody()->getContents(); $data = json_decode($body, true); $nextLink = $data["next"]; if (!is_null($nextLink)) { $parsedUrl = parse_url($nextLink); parse_str($parsedUrl['query'], $queryParams); $nextPage = $queryParams['page']; } $results = $data['results']; $idToReturn = null; foreach ($results as $result) { $dataItem = Carbon::parse($result["register_date"]); if ($dateParam->isSameDay($dataItem)) { $idToReturn = $result["id"]; return $idToReturn; } } if (!is_null($nextLink)) { return $this->getReservationByDate($date, $nextPage); } } } else { $this->loginAPI(); $this->getReservationByDateAPI($date, $page); } return redirect()->back(); }
问题原因及解决方法
核心问题:递归调用未返回值
在else分支中,调用$this->getReservationByDateAPI($date, $page)(疑似笔误,应为getReservationByDate)时未添加return关键字,导致递归得到的ID无法向上传递,函数最终会执行到末尾的return redirect()->back();,返回重定向响应。修正代码
将else分支的代码改为:} else { $this->loginAPI(); return $this->getReservationByDate($date, $page); }额外优化建议
如果API请求返回非200状态码,当前逻辑也会走到末尾返回重定向,建议在非200分支抛出异常或返回明确的错误标识,避免业务返回值和重定向响应混淆。
内容的提问来源于stack exchange,提问作者Swim89
相关产品推荐
相关产品推荐

