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

Laravel中如何在控制器的不同函数之间传递数据?

解决方案

场景1:同一请求生命周期内先后调用两个方法

这是最常见的业务场景,直接通过控制器类属性传递即可,步骤如下:

  1. 先在控制器头部声明$request类属性,避免PHP 8.2+版本的动态属性废弃警告
  2. 保证changeData方法的调用顺序早于apply方法,直接在apply中读取类属性赋值
    完整代码示例:
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class CustomController extends Controller
{
    // 声明类属性
    protected $request;

    public function changeData (){
        $rq = Request();
        $this->request = $rq->merge(["tax"=>$rq->tax * 12]);
    }

    public function apply (){
        // 直接读取类属性赋值给$data
        $data = $this->request;
        // 此处可添加后续业务逻辑
    }

    // 示例入口方法,保证调用顺序
    public function index()
    {
        $this->changeData();
        return $this->apply();
    }
}

场景2:两个方法对应不同路由、不同请求调用

如果是用户分两次请求分别触发两个方法,类属性无法跨请求保留数据,需要通过session存储传递:
changeData方法修改为:

public function changeData (){
    $rq = Request();
    $processedRequest = $rq->merge(["tax"=>$rq->tax * 12]);
    // 存入session
    session(['processed_req' => $processedRequest]);
}

apply方法取值逻辑:

public function apply (){
    $data = session('processed_req');
    // 读取完成后可清除session避免脏数据
    session()->forget('processed_req');
    // 后续业务逻辑
}

注意事项

  • 采用类属性传递数据时,如果apply调用前没有执行changeData,$this->request会为null,可根据业务需要添加非空判断
  • 跨请求传递敏感数据时建议做签名校验,避免数据篡改

内容的提问来源于stack exchange,提问作者user17426459

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:24:03