Skip to content

路由

WARNING

该功能在核心包 catchadmin/pro >= 0.5.4 版本提供

介绍

在后台开发中,处理表格(table)是常见的任务。基本的单页表格通常包括列表、数据新增、数据编辑以及行删除这四个主要操作。为此,Laravel 提供了一个便捷的 resource 路由方法,可以一次性注册相关路由。例如,针对用户管理,我们可以这样定义路由:

php
// CatchAdmin 是接口开发,这里使用 apiResource
Route::apiResource('users', UsesController::class);

该方法会自动生成以下五条路由:

  • GET users - 显示列表数据 -> index 方法
  • POST users - 新增数据 -> store 方法
  • PUT users/{id} - 更新数据 -> update 方法
  • GET users/{id} - 请求单条数据 -> show 方法
  • DELETE users/{id} - 删除数据 -> destroy 方法

这样的设计确实很方便,不过如果某个方法不再需要,比如我们不希望保留删除路由,该如何处理呢?这时可以通过 except 方法排除掉不需要的路由:

php
Route::apiResource('users', UsesController::class)->except(['destroy']);

此外,在后台表格数据列表中,经常需要进行导入和导出等操作,这时就需要添加额外的路由:

php
Route::apiResource('users', UsesController::class)->except(['destroy']);
// 添加导入路由
Route::post('users/import', [UsesController::class, 'import']);

每次都要回到路由文件修改确实显得繁琐,那么有没有更为高效的解决方案呢?

adminResource

当然有。CatchAdmin 提供了 adminResource 方法来简化这一过程,它是对 apiResource 方法的扩展。如下所示:

php
Route::adminResource('users', UsesController::class);

使用 adminResource 后,除了保留上述方法外,还会额外提供以下几种方法:

  • PUT users/enable/{id} - 状态更改 -> enable 方法
  • GET export/users - 导出数据 -> export 方法
  • POST import/users - 导入数据 -> import 方法
  • PUT users/restore/{id} - 恢复数据 -> restore 方法
  • GET form/users - 动态表单 -> form 方法
  • GET table/users - 动态表格 -> table 方法

不仅如此,CatchAdmin 还优化了这些默认的方法。与 Laravel 自带的 apiResource 不同,后者在注册路由时始终生成五条,无论控制器中是否有对应的方法。如果 UsesController 仅有 index 方法,依然会注册全部五条路由,这就需要回到路由文件使用 except 方法进行排除。

adminResource 则更为智能。在控制器中若不存在对应方法或方法并非 public,那么相应路由将不会被注册。因此,adminResource 在使用时,能够实现更高的自动化,生成的路由表也更加精简。

WARNING

如在生产环境中使用,请务必执行 php artisan route:cache 以提高性能。