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

Laravel 6中$request->input()无法获取表单数组数据求助

问题根源分析

你的问题出在FormData转JSON的方式上。当前的formData()方法把表单字段的键(比如prices[type][1])直接作为字符串键存入对象,生成的JSON结构是平级的:

{
  "prices[type][1]": "输入值1",
  "prices[type][2]": "输入值2"
}

而Laravel的Request类解析JSON请求时,只会识别嵌套的对象/数组结构,不会自动把prices[type][1]这种字符串键解析成多维数组。这就是为什么$request->input('prices')拿不到数据,但$request->all()能看到所有平级键值对的原因。

解决方案:解析表单键为嵌套结构

你需要修改formData()方法,把带括号的表单键(比如prices[type][1])解析成嵌套的对象/数组。下面是实现代码:

formData(): Object {
  const formData = new FormData(this.$el);
  const parsedData = {};

  Array.from(formData.entries()).forEach(([key, value]) => {
    // 拆分键为路径数组,比如"prices[type][1]"拆成["prices", "type", "1"]
    const keys = key.replace(/\]/g, '').split('[');
    let current = parsedData;

    // 逐层构建嵌套结构
    for (let i = 0; i < keys.length; i++) {
      const k = keys[i];
      // 如果是最后一个键,赋值
      if (i === keys.length - 1) {
        current[k] = value;
      } else {
        // 如果当前层级不存在,初始化对象/数组(根据下一个键是否为数字判断)
        current[k] = current[k] || (isNaN(Number(keys[i+1])) ? {} : []);
        current = current[k];
      }
    }
  });

  return JSON.stringify(parsedData);
}

这段代码会把表单字段转换成Laravel能识别的嵌套JSON结构:

{
  "prices": {
    "type": [
      null, // 因为表单索引从1开始,数组索引0会是空值,不影响Laravel解析
      "输入值1",
      "输入值2"
    ]
  }
}
验证效果

修改后,你就可以在Laravel中正常使用:

$prices = $request->input('prices');
// $prices会是一个数组:['type' => [null, '输入值1', '输入值2']]
$typePrices = $request->input('prices.type');
// 获取type对应的数组
额外小提示

如果不想修改前端代码,也可以在Laravel端手动处理原始数据,但这种方式不如前端修正规范,仅作应急参考:

$allData = $request->all();
$prices = [];
foreach ($allData as $key => $value) {
  if (str_starts_with($key, 'prices[')) {
    // 手动解析键并构建数组的逻辑
    // 示例代码省略,推荐优先修改前端实现
  }
}

内容的提问来源于stack exchange,提问作者Robin B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:48:03