如何重写reorder路由以传递分类ID并按分类筛选文章?
实现带分类ID的Reorder路由配置
要实现传递分类ID并按分类列出文章的reorder路由,你可以直接按以下方式定义路由:
// GET 请求:展示分类下文章的排序页面 Route::get($segment.'/{id}/reorder', [ 'as' => $routeName.'.reorder', 'uses' => $controller.'@reorder', 'operation' => 'reorder', ]); // POST 请求:保存分类下文章的排序结果 Route::post($segment.'/{id}/reorder', [ 'as' => $routeName.'.save.reorder', 'uses' => $controller.'@saveReorder', 'operation' => 'reorder', ]);
关键说明:
{id}是你要传递的分类ID参数,路由会自动捕获URL中的该值并传递给控制器方法。$segment为路由前缀(如admin/posts),$routeName为路由名称前缀(如admin.posts),需确保这两个变量在路由定义前已正确赋值。
控制器方法处理:
在对应控制器中,通过方法参数接收分类ID,再查询该分类下的文章:
// 展示排序页面 public function reorder($id) { // 根据分类ID获取对应文章列表 $posts = Post::where('category_id', $id)->orderBy('order')->get(); // 传递分类ID和文章列表到视图 return view('admin.posts.reorder', compact('id', 'posts')); } // 保存排序结果 public function saveReorder(Request $request, $id) { // 获取排序数据并处理保存逻辑 $order = $request->input('order'); foreach ($order as $position => $postId) { Post::where('id', $postId)->where('category_id', $id)->update(['order' => $position]); } return redirect()->route($request->route()->getName().'.reorder', ['id' => $id])->with('success', '排序已保存'); }
视图中生成路由链接:
若需在视图里生成排序页面的跳转链接,可使用Laravel路由助手函数:
<a href="{{ route($routeName.'.reorder', ['id' => $category->id]) }}">排序该分类下的文章</a>
内容的提问来源于stack exchange,提问作者Liju
相关产品推荐
相关产品推荐

