Laravel中links()分页GET请求不支持问题解决方案咨询
解决搜索分页时GET请求不被支持的问题
方案一:让路由同时支持GET和POST请求
直接修改路由配置,允许GET和POST两种方法访问搜索接口,这样分页的GET请求就能正常进入处理方法:
// 方式1:指定允许的方法 Route::match(['get', 'post'], 'search', ['as' => 'cat.search', 'uses' => 'CatController@search']); // 方式2:允许所有HTTP方法(更简洁) Route::any('search', ['as' => 'cat.search', 'uses' => 'CatController@search']);
接着调整控制器方法,确保分页链接带上搜索关键词(避免切换页码时丢失搜索条件):
public function search(Request $request) { $search = $request->get('search'); if ($request->filled('search')) { $cat = Tombe::where('name', 'like', "%{$search}%") ->orWhere('description', 'like', "%{$search}%") ->paginate(15); // 把搜索参数附加到分页链接中 $cat->appends(['search' => $search]); if ($cat->isNotEmpty()) { return view('admin.cat.search', compact('cat')); } else { return back()->with('error', '未找到匹配结果'); } } else { return back()->with('error', '请输入搜索关键词'); } }
方案二:POST提交后重定向到GET路由(更符合REST规范)
这种方式让用户提交搜索用POST,之后重定向到带搜索参数的GET路由,分页时用GET请求,搜索结果的URL可收藏分享:
- 添加两个路由:
// 处理POST提交的搜索请求 Route::post('search-submit', ['as' => 'cat.search.submit', 'uses' => 'CatController@searchSubmit']); // 处理GET请求的搜索结果展示(含分页) Route::get('search', ['as' => 'cat.search', 'uses' => 'CatController@search']);
- 新增并修改控制器方法:
// 处理POST提交,验证后重定向到GET路由 public function searchSubmit(Request $request) { if (!$request->filled('search')) { return back()->with('error', '请输入搜索关键词'); } return redirect()->route('cat.search', ['search' => $request->get('search')]); } // 处理GET请求,返回搜索结果及分页 public function search(Request $request) { $search = $request->get('search'); $cat = Tombe::where('name', 'like', "%{$search}%") ->orWhere('description', 'like', "%{$search}%") ->paginate(15); $cat->appends(['search' => $search]); if ($cat->isEmpty()) { return back()->with('error', '未找到匹配结果'); } return view('admin.cat.search', compact('cat')); }
- 前端表单更新提交地址:
<form action="{{ route('cat.search.submit') }}" method="POST"> @csrf <input type="text" name="search" value="{{ request('search') }}"> <button type="submit">搜索</button> </form>
内容的提问来源于stack exchange,提问作者Dwi Simon
相关产品推荐
相关产品推荐

