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生成的公共逻辑抽离到独立的服务类,两个控制器都注入该服务类调用方法,维护性和复用性更好:
- 新建
app/Services/ExportService.php服务类
namespace App\Services; class ExportService { public function generateXML($racc) { // 把原来ExportFileController里的XML生成逻辑移到这里 } }
- 控制器中调用
// 先引入服务类 use App\Services\ExportService; // 方法中注入调用 public function gestisciSpedizione(Request $request, ExportService $exportService) { // 你的原有逻辑... $xmlResult = $exportService->generateXML($racc); // 后续处理... }
内容的提问来源于stack exchange,提问作者64Bit1990
相关产品推荐
相关产品推荐

