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

Laravel API传递同名参数问题:如何避免首个参数被覆盖

解决Laravel API接收同名参数被覆盖的问题

方法一:遵循HTTP规范传递参数(推荐)

HTTP标准中传递多值参数的正确格式是在参数名后追加[],即:
name[]=test&name[]=test1
这种格式下,Laravel会自动将参数解析为数组,直接在控制器中即可获取:

$names = $request->input('name');
// 输出结果:['test', 'test1']

方法二:严格使用name=test&name=test1格式的处理方案

如果必须保持参数名不带[],需要手动解析原始查询字符串(PHP默认会覆盖重复键名的参数)。在控制器中可按以下方式处理:

// 获取原始查询字符串
$queryString = request()->getQueryString();
$nameValues = [];

// 拆分并遍历所有查询参数
foreach (explode('&', $queryString) as $param) {
    // 拆分键值对(避免值中包含=符号导致拆分错误)
    [$key, $value] = array_pad(explode('=', $param, 2), 2, null);
    $key = urldecode($key);
    $value = urldecode($value);
    
    if ($key === 'name' && $value !== null) {
        $nameValues[] = $value;
    }
}

// $nameValues 即为所有name参数的值数组
// 示例输出:['test', 'test1']

如果需要全局复用该逻辑,可以通过请求宏实现:
在App\Providers\AppServiceProvider的boot方法中添加:

use Illuminate\Http\Request;

Request::macro('getMultiParam', function ($key) {
    $queryString = $this->getQueryString();
    $values = [];
    foreach (explode('&', $queryString) as $param) {
        [$paramKey, $value] = array_pad(explode('=', $param, 2), 2, null);
        $paramKey = urldecode($paramKey);
        $value = urldecode($value);
        if ($paramKey === $key && $value !== null) {
            $values[] = $value;
        }
    }
    return $values;
});

之后在任意控制器中直接调用:

$names = request()->getMultiParam('name');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:15:43