Laravel中如何在控制器的不同函数之间传递数据?
解决方案
场景1:同一请求生命周期内先后调用两个方法
这是最常见的业务场景,直接通过控制器类属性传递即可,步骤如下:
- 先在控制器头部声明
$request类属性,避免PHP 8.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
相关产品推荐
相关产品推荐

