You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:44:52