Laravel如何将路由参数改为URL查询参数实现按qr_url查询用户
实现方案
1. 修改路由定义
把原有路由替换为如下代码,取消路径参数定义,匹配你需要的/Home/GetResultByQR路径:
Route::get('/Home/GetResultByQR', [UserController::class, 'inquiry'])->name('users.inquiry');
Laravel的路由助手函数会自动把未匹配到路由路径的参数转为查询字符串,后续生成链接的逻辑不需要大幅修改。
2. 修改控制器方法逻辑
现在query是URL查询参数,需要从请求实例中获取,调整inquiry方法代码如下:
use Illuminate\Http\Request; public function inquiry(Request $request) { // 校验query参数是否传递,可加长度校验提升查询效率 $validated = $request->validate([ 'query' => 'required|string|size:170' ]); $user = User::where('qr_url', '=', $validated['query'])->first(); return view('users/inquiry', compact('user')); }
3. 前端链接生成验证
原有生成链接的代码不需要修改,直接调用route('users.inquiry', ['query' => $user->qr_url])即可,Laravel会自动生成符合要求的URL格式:http://example.com/Home/GetResultByQR?query=xxx。
可选优化建议
可以给该路由加限流中间件,避免被恶意遍历扫描qr_url:
Route::get('/Home/GetResultByQR', [UserController::class, 'inquiry']) ->name('users.inquiry') ->middleware('throttle:30,1'); // 限制每分钟最多30次请求
内容的提问来源于stack exchange,提问作者Osama Amr
相关产品推荐
相关产品推荐

