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

如何在Laravel的DataFormController与PointController间传递指定数据?

解决Laravel控制器间数据传递的几种方案

方案一:前端中转传递(最直接的交互场景)

两个接口由前端依次触发时,可先调用app/data-form接口拿到目标数据,再在调用campaign/newTransaction接口时,将values、dates、count作为请求参数传递。

前端伪代码示例:

// 先调用getDataForm接口获取数据
fetch('/app/data-form', {
  method: 'GET',
  headers: { 'Authorization': 'Bearer ' + token }
})
.then(res => res.json())
.then(data => {
  // 提取需要的三个字段
  const { values, dates, count } = data;
  // 调用newTransaction接口并传递数据
  return fetch('/campaign/newTransaction', {
    method: 'POST',
    headers: { 
      'Authorization': 'Bearer ' + token,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ values, dates, count })
  });
})
.then(res => res.json())
.then(result => {
  // 处理接口返回结果
});

PointController接收数据:

class PointController extends Controller {
  public function newTransaction(Request $request){
    // 直接从请求中提取数据
    $values = $request->input('values');
    $dates = $request->input('dates');
    $count = $request->input('count');
    
    // 后续业务逻辑处理
     return response()->json([
     'status'=>'success',
     'msg'=>$data
    ],200);
  }
}

方案二:提取公共逻辑到服务类(推荐,解耦控制器)

将生成values、dates、count的核心逻辑抽离到独立服务类,让两个控制器通过调用服务类方法获取数据,避免控制器间耦合,实现代码复用。

1. 创建服务类

在app/Services目录下新建DataFormService.php:

<?php

namespace App\Services;

use Illuminate\Http\Request;

class DataFormService {
    public function getRequiredData(Request $request) {
        // 原DataFormController中生成values、dates、count的逻辑
        $model = $request->model;
        $uuid = $request->uuid;
        
        // 替换为实际生成数据的代码
        $values = ...; 
        $dates = ...; 
        $count = ...; 
        
        return compact('values', 'dates', 'count');
    }
}

2. 修改DataFormController

class DataFormController extends \App\Http\Controllers\Controller {
    public function getDataForm(Request $request, \App\Services\DataFormService $service) {
        $model = $request->model;
        $uuid = $request->uuid;
        
        // 通过服务类获取目标数据
        $data = $service->getRequiredData($request);
        $values = $data['values'];
        $dates = $data['dates'];
        $count = $data['count'];
        
        // 其他原有逻辑
        return response()->json([
            'status' => 'success',
            'settings' => $settings, 
            'form' => $form, 
            'relations' => $relations, 
            'values' => $values, 
            'dates' => $dates, 
            'actions' => $actions, 
            'translations' => $translations, 
            'count' => $count, 
            'max' => $limitationMax, 
            'limitReached' => $limitReached
        ], 200);
    }
}

3. 修改PointController

class PointController extends Controller {
    public function newTransaction(Request $request, \App\Services\DataFormService $service){
        // 调用服务类获取数据(需确保request中包含model、uuid等必要参数)
        $data = $service->getRequiredData($request);
        $values = $data['values'];
        $dates = $data['dates'];
        $count = $data['count'];
        
        // 后续业务逻辑处理
         return response()->json([
         'status'=>'success',
         'msg'=>$data
        ],200);
    }
}

方案三:使用会话(Session)传递(仅适用于有状态场景)

注意:auth:api中间件默认无状态,需修改app/Http/Kernel.php的api中间件组,添加StartSession中间件,且两个接口需属于同一用户。

在DataFormController中存储数据到Session:

public function getDataForm(Request $request) {
    // 生成values、dates、count的逻辑
    
    // 存储到会话
    $request->session()->put([
        'df_values' => $values,
        'df_dates' => $dates,
        'df_count' => $count
    ]);
    
    // 返回原有响应
}

在PointController中从Session读取:

public function newTransaction(Request $request){
    // 从会话中获取数据
    $values = $request->session()->get('df_values');
    $dates = $request->session()->get('df_dates');
    $count = $request->session()->get('df_count');
    
    // 可选:读取后删除会话中的数据,避免重复使用
    $request->session()->forget(['df_values', 'df_dates', 'df_count']);
    
    // 后续业务逻辑处理
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:45:34