如何为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
相关产品推荐
相关产品推荐

