Laravel Voyager中为Product模型创建多浏览页面及路由配置
实现多产品浏览页面的路由方案
1. 添加自定义路由
在项目的routes/web.php文件中,添加一条带admin权限验证的路由,指向自定义控制器方法:
Route::group(['prefix' => 'admin', 'middleware' => ['admin.user', 'admin']], function () { Route::get('products/published', [App\Http\Controllers\Admin\ProductController::class, 'showPublishedProducts'])->name('voyager.products.published'); });
2. 编写自定义控制器方法
新建或修改Admin目录下的Product控制器,继承Voyager的基础控制器,实现筛选逻辑:
<?php namespace App\Http\Controllers\Admin; use Illuminate\Http\Request; use TCG\Voyager\Http\Controllers\VoyagerBaseController; class ProductController extends VoyagerBaseController { public function showPublishedProducts(Request $request) { // 获取Product对应的DataType配置 $this->dataType = \TCG\Voyager\Models\DataType::where('slug', 'products')->firstOrFail(); // 构建筛选查询:仅保留publisher_id不为null的记录 $query = $this->dataType->model()->whereNotNull('publisher_id'); // 复用Voyager默认的筛选、排序、分页逻辑 $this->applyFilters($query, $this->dataType); $orderBy = $request->get('order_by', $this->dataType->order_column ?? 'id'); $sortOrder = $request->get('sort_order', $this->dataType->order_direction ?? 'desc'); $query->orderBy($orderBy, $sortOrder); $dataTypeContent = $query->paginate($request->get('per_page', config('voyager.per_page'))); // 传递页面所需数据 $this->data['dataType'] = $this->dataType; $this->data['dataTypeContent'] = $dataTypeContent; $this->data['bread'] = $this->dataType->bread; $this->data['title'] = '已发布产品列表'; // 返回Voyager默认的列表视图,保持样式统一 return view('voyager::bread.browse', $this->data); } }
3. 后台菜单添加入口(可选)
登录Voyager后台,进入「菜单」管理界面,新增一个菜单项:
- 名称:填写“已发布产品”
- 路由:选择
voyager.products.published - 图标:可选择合适的图标(如
fa fa-list)
添加后即可在后台菜单中直接访问该页面。
内容的提问来源于stack exchange,提问作者D .MOTAHARI
相关产品推荐
相关产品推荐

