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

Laravel如何将POST路由的多参数传递到对应控制器

Laravel POST路由传递多个参数的实现方案

方案1:保留现有路径参数写法

你当前的路由已经配置了路径参数{date_from}和{date_to},直接按规则拼接参数到请求URL即可:

  • 请求示例:POST https://你的服务地址/api/payments/2024-01-01/2024-06-30
  • 注意你原有代码存在以下需要修复的错误:
    • 变量拼写错误:方法入参是$date_from、$date_to,查询条件里误写为$data_from、$data_to
    • 多表关联写法错误:DB::table("casefiles, payments")不符合Laravel查询构造器规范,应使用join方法关联两表
    • 字段对比逻辑错误:普通where方法第三个参数传字符串会被识别为值,不会作为字段对比,关联逻辑直接放到join参数中即可

修正后控制器代码:

class PaymentController extends Controller 
{
    public function apiPaymentByUserId($date_from, $date_to) { 
        $payments = DB::table('payments')
            ->join('casefiles', 'casefiles.id', '=', 'payments.casefile_id')
            ->select("payments.*")
            ->where("casefiles.user_id", "=", Auth::id())
            ->where("payments.created_at", ">=", $date_from)
            ->where("payments.updated_at", "<=", $date_to)
            ->get();
            
        return response()->json([ 
            'success' => true, 
            'response' => $payments 
        ]);
    }
}

路由无需修改,保持原有配置即可:

Route::post('/payments/{date_from}/{date_to}', 'Api\PaymentController@apiPaymentByUserId');

方案2:请求体传参(更推荐,适合多参数、敏感参数场景)

POST请求默认推荐将参数放到请求体中传输,避免URL过长或者参数泄露:

  1. 先修改路由,移除路径参数:
Route::post('/payments', 'Api\PaymentController@apiPaymentByUserId');
  1. 控制器通过Request对象接收请求体参数,还可以附加参数验证逻辑:
use Illuminate\Http\Request;

class PaymentController extends Controller 
{
    public function apiPaymentByUserId(Request $request) { 
        // 参数合法性校验
        $validated = $request->validate([
            'date_from' => 'required|date',
            'date_to' => 'required|date|after_or_equal:date_from'
        ]);

        $payments = DB::table('payments')
            ->join('casefiles', 'casefiles.id', '=', 'payments.casefile_id')
            ->select("payments.*")
            ->where("casefiles.user_id", "=", Auth::id())
            ->where("payments.created_at", ">=", $validated['date_from'])
            ->where("payments.updated_at", "<=", $validated['date_to'])
            ->get();
            
        return response()->json([ 
            'success' => true, 
            'response' => $payments 
        ]);
    }
}
  1. 调用请求时,将date_from、date_to放到POST请求的body中,支持form-data、x-www-form-urlencoded、JSON等格式传输。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 14:51:04