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

Laravel 8中使用\App::call跨控制器调用方法时如何传递参数

正确传参方案

方案1:直接使用App::call的第二个参数传参

App::call方法的第二个参数就是方法参数绑定数组,键对应要传递的参数名,值对应你要传的变量,直接修改你代码里的调用行即可:

// 原来的错误写法
// return \App::call('App\Http\Controllers\ExportFileController@exportXML')->with('racc', $racc);
// 正确写法
return \App::call('App\Http\Controllers\ExportFileController@exportXML', [
    'racc' => $racc
]);

注意:你需要确保ExportFileController的exportXML方法定义中,接收的参数名和数组键保持一致,示例:

// ExportFileController 中的方法定义
public function exportXML($racc)
{
    // 你的原有XML生成逻辑,直接使用$racc变量即可
}

代码逻辑注意事项

你当前代码中调用\App::call后直接return,后续的日志记录、跳转逻辑会完全不执行,如果不需要直接返回XML响应,而是需要生成后继续走后续流程,可以先接收调用结果再处理:

$xmlResponse = \App::call('App\Http\Controllers\ExportFileController@exportXML', [
    'racc' => $racc
]);
// 后续可以处理$xmlResponse,比如保存到文件等
Log::channel('custom_log')->info('L\'utente '.Auth::user().' ha prenotato con successo la spedizione numero: '.$request->input('codice_prenotazione').' FILE :');
return redirect()->back()->with('success', 'Prenotazione della spedizione effettuata con successo');

更优实现方案(推荐)

跨控制器调用方法不符合Laravel的最佳实践,建议你把XML生成的公共逻辑抽离到独立的服务类,两个控制器都注入该服务类调用方法,维护性和复用性更好:

  1. 新建app/Services/ExportService.php服务类
namespace App\Services;

class ExportService
{
    public function generateXML($racc)
    {
        // 把原来ExportFileController里的XML生成逻辑移到这里
    }
}
  1. 控制器中调用
// 先引入服务类
use App\Services\ExportService;

// 方法中注入调用
public function gestisciSpedizione(Request $request, ExportService $exportService)
{
    // 你的原有逻辑...
    $xmlResult = $exportService->generateXML($racc);
    // 后续处理...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:09:04