You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 15:33:23