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

如何为Request对象新增参数来调用同一控制器内的save方法

问题原因

Laravel 中 Request 对象的输入参数和动态赋值的类属性是分开存储的:

  • $request->all() 方法只会返回请求自带的 query 参数、POST 参数、上传文件等预定义输入集合里的内容
  • 你直接用 $request->item = $part 这种方式赋值,是给 Request 对象新增了一个类属性,没有加入到输入参数集合中,所以 all() 方法无法读取到这部分值。
解决方法

方法1:使用merge()方法合并参数(最推荐)

直接调用Request自带的merge()方法,会把你传入的参数合并到输入集合中,all()就能正常读取:

foreach ($_parts as $key => $part_data) {
    // 合并参数到Request输入集合
    $request->merge([
        'item' => $part,
        'qty' => $part_data->quantity
    ]);
    $call = $this->save($request);
}

如果循环中每次的参数需要独立,不想互相覆盖,也可以每次克隆新的Request对象操作,避免污染原请求:

foreach ($_parts as $key => $part_data) {
    $newRequest = clone $request;
    $newRequest->merge([
        'item' => $part,
        'qty' => $part_data->quantity
    ]);
    $call = $this->save($newRequest);
}

方法2:直接按属性读取参数(不推荐)

如果你不需要使用$request->all(),只需要单独获取参数,也可以在save方法中直接按属性读取你赋值的内容:

public function save(Request $request) {
    // 直接读取动态赋值的属性
    dd($request->item, $request->qty);
}

这种方式不符合Request的使用规范,仅适合临时调试使用。

内容的提问来源于stack exchange,提问作者Sowndhar Kumar R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:24:05