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过长或者参数泄露:
- 先修改路由,移除路径参数:
Route::post('/payments', 'Api\PaymentController@apiPaymentByUserId');
- 控制器通过
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 ]); } }
- 调用请求时,将
date_from、date_to放到POST请求的body中,支持form-data、x-www-form-urlencoded、JSON等格式传输。
内容的提问来源于stack exchange,提问作者Aogiri14
相关产品推荐
相关产品推荐

