如何在 Laravel 路由中正确传递数组参数

来源:APP编程网作者:狼行天下头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何在 Laravel 路由中正确传递数组参数》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在 Laravel 路由中正确传递数组参数》有用,将其分享出去将是对创作者最好的鼓励。

在Laravel项目开发中,经常需要在路由中传递数组类型的参数,满足批量操作、多条件筛选等业务需求。常见的传递场景包括前端提交多个ID进行批量删除、传递多个筛选条件查询数据等,不同的请求方式对应不同的参数传递和接收逻辑。

如何在 Laravel 路由中正确传递数组参数

GET请求中传递数组参数

路由定义方式

GET请求的数组参数通常通过查询字符串传递,路由定义不需要特殊处理,直接定义普通路由即可。示例如下:

<?php
// routes/web.php
use IlluminateSupportFacadesRoute;
use AppHttpControllersTestController;

// 定义GET路由,无需在路由路径中声明数组参数
Route::get('/test-array-params', [TestController::class, 'getArrayParams']);

前端传递参数方式

前端传递数组参数时,需要在参数名后添加[]标识,多个值对应同一个参数名即可。示例如下:

<!-- 方式一:直接在URL中拼接查询字符串 -->
<a href="/test-array-params?ids[]=1&ids[]=2&ids[]=3">传递数组参数</a>

<!-- 方式二:表单提交 -->
<form action="/test-array-params" method="get">
    <input type="checkbox" name="ids[]" value="1" checked>ID1
    <input type="checkbox" name="ids[]" value="2" checked>ID2
    <input type="checkbox" name="ids[]" value="3" checked>ID3
    <button type="submit">提交</button>
</form>

控制器接收参数

在控制器中可以通过request()助手函数或者Request对象直接接收数组参数,示例如下:

<?php
namespace AppHttpControllers;

use IlluminateHttpRequest;

class TestController extends Controller
{
    public function getArrayParams(Request $request)
    {
        // 直接获取数组参数,默认返回数组
        $ids = $request->input('ids');
        // 也可以使用get方法
        $ids2 = $request->get('ids');
        // 如果参数不存在,返回默认值空数组
        $ids3 = $request->input('ids', []);
        
        return response()->json([
            'ids' => $ids,
            'type' => gettype($ids)
        ]);
    }
}

POST请求中传递数组参数

路由定义方式

POST请求的路由定义和GET类似,使用post方法定义即可,示例如下:

<?php
// routes/web.php
Route::post('/test-post-array', [TestController::class, 'postArrayParams']);

前端传递参数方式

POST请求可以通过表单或者AJAX传递数组参数,表单传递时同样需要给参数名加[],AJAX传递时直接传递数组格式的值即可。示例如下:

<!-- 表单方式 -->
<form action="/test-post-array" method="post">
    @csrf
    <input type="text" name="names[]" value="张三">
    <input type="text" name="names[]" value="李四">
    <input type="text" name="names[]" value="王五">
    <button type="submit">提交</button>
</form>

<!-- AJAX方式 -->
<script>
function postArrayData() {
    let data = {
        '_token': '{{ csrf_token() }}',
        'names': ['张三', '李四', '王五']
    };
    fetch('/test-post-array', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify(data)
    })
    .then(response => response.json())
    .then(res => console.log(res));
}
</script>

控制器接收参数

POST请求的数组参数接收方式和GET一致,示例如下:

<?php
public function postArrayParams(Request $request)
{
    // 接收表单提交的数组
    $names = $request->input('names');
    // 接收JSON格式的数组
    $names2 = $request->json('names');
    
    return response()->json([
        'names' => $names,
        'names2' => $names2
    ]);
}

路由路径中传递数组参数

如果需要在路由路径中传递数组参数,可以通过路由参数绑定实现,不过这种方式更适合参数数量固定的场景。示例如下:

<?php
// 路由定义,使用多个参数占位符
Route::get('/test-path-array/{param1}/{param2}/{param3}', [TestController::class, 'pathArrayParams']);

控制器中接收时可以将多个参数组合成数组:

<?php
public function pathArrayParams($param1, $param2, $param3)
{
    $params = [$param1, $param2, $param3];
    return response()->json(['params' => $params]);
}

常见问题与排查

  • 参数接收为null:检查前端传递的参数名是否和后端接收的参数名一致,GET请求检查查询字符串是否正确,POST请求检查是否携带CSRF令牌(web路由组默认开启CSRF保护)。
  • 参数不是数组格式:检查前端传递数组时是否给参数名加了[],如果是AJAX传递JSON数据,检查前端是否正确序列化了数组。
  • 路由参数绑定错误:如果是在路径中传递数组,检查路由定义的占位符数量和实际传递的参数数量是否匹配,避免参数缺失导致404错误。
注意:如果传递的数组参数包含特殊字符,建议在前端进行URL编码,后端接收后会自动解码,避免参数格式错误。

Laravel路由数组参数参数传递修改时间:2026-07-03 03:03:26

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。