Laravel表单提交:自定义路由参数的URL结构实现
Laravel表单提交URL改为路径参数格式的实现方案
你需要修改三个核心部分:表单提交逻辑、路由约束、控制器参数获取方式,具体操作如下:
1. 调整表单提交逻辑(添加JS拦截)
原生GET表单会自动将输入转为查询参数,因此需要用JavaScript拦截提交事件,手动构造路径参数格式的URL并跳转:
<form class="d-flex" method="GET" action="{{ route('client.info.get') }}" id="infoForm"> <div class="btn-group ipchi-searchbox" role="group" aria-label=""> <input type="text" name="input" class="form-control form-control-lg custom-rounded-input" placeholder="جستجوی آی پی یا دامین" aria-label="Enter IP address" aria-describedby="search-btn" value=""> <button class="btn btn-primary btn-lg btn-block" type="submit" id="search-btn-ip"> <i class="fa-solid fa-magnifying-glass"></i> </button> </div> </form> <script> document.getElementById('infoForm').addEventListener('submit', function(e) { e.preventDefault(); // 阻止默认表单提交行为 const inputValue = this.querySelector('input[name="input"]').value.trim(); if (!inputValue) return; // 空输入不执行跳转 // 构造目标URL:基础路由地址 + 编码后的输入值 const targetUrl = "{{ route('client.info.get') }}/" + encodeURIComponent(inputValue); window.location.href = targetUrl; }); </script>
2. 优化路由(添加参数正则约束)
为了让路由精准匹配IP或域名格式,给input参数添加正则约束,避免和其他路由冲突:
Route::group(['as' => 'client.'], function(){ Route::group(['as' => 'info.', 'prefix' => 'info'], function(){ // 正则约束匹配IP(v4/v6)或标准域名格式 Route::get('/{input}', [IpInfoController::class, 'getInfo']) ->name('get') ->where('input', '^([0-9a-fA-F:.]+|([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,})$'); }); });
注:如果需要保留空参数访问初始页面,可以将
{input}改为{input?},但需确保提交时输入不为空。
3. 修改控制器参数获取方式
原来从查询参数input取值,现在改为直接从路由参数获取:
public function getInfo(Request $request, $input) { // 直接使用路由注入的$input参数 $validator = Validator::make(['input' => $input], [ 'input' => 'required|string', ]); if ($validator->fails()) { return response()->json(['error' => 'Invalid input.'], 400); } if (filter_var($input, FILTER_VALIDATE_IP)) { $data = $this->getIpInfo($input); } else { $data = $this->getDomainInfo($input); } return response()->json($data); }
也可以通过$request->route('input')获取路由参数,效果一致。
额外注意
- 使用
encodeURIComponent处理输入值,确保含特殊字符的IP/域名能正确传递; - 路由正则约束可根据实际需求调整,比如允许包含更多特殊符号的自定义域名格式。
内容的提问来源于stack exchange,提问作者Pouya Vaghefi
相关产品推荐
相关产品推荐

