主题
路由
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
以提高性能。