自定义路由不生效

原因一:路由顺序冲突

代码生成器生成的路由使用 resource 方法,会自动注册 7 个 RESTful 路由:

$router->resource('users', UserController::class);
// 相当于注册了:
// GET    /users          - index
// GET    /users/create   - create  
// POST   /users          - store
// GET    /users/{id}     - show
// GET    /users/{id}/edit - edit
// PUT    /users/{id}     - update
// DELETE /users/{id}     - destroy

如果你在 resource 路由之后添加自定义路由,且路径与 resource 路由冲突,自定义路由会被忽略。

原因二:自动生成文件被覆盖

routes/admin.php 是自动生成的文件,每次运行代码生成器时会被完全重写,手动添加的路由会丢失。

路由加载顺序

系统按以下顺序加载路由:

1. 系统基础路由(登录、菜单、权限等)     - Admin::loadBaseRoute()
2. 扩展路由                                - Admin::extension()->boot()
3. routes/admin.php(代码生成器生成)      - loadRoutesFrom('routes/admin.php')
4. app/Admin/routes.php(自定义路由)      - loadRoutesFrom('app/Admin/routes.php')
5. 模块路由                                - loadRoutesFrom(module routes)

解决方案

方案一:自定义路由写在 resource 之前

// ✅ 正确:自定义路由在前
$router->get('users/export', [UserController::class, 'export']);
$router->resource('users', UserController::class);

方案二:使用不同的路径 (推荐)

$router->resource('users', UserController::class);
// ✅ 使用不冲突的路径
$router->get('user-export', [UserController::class, 'export']);

方案三:限制 resource 路由

// 只注册需要的路由
$router->resource('users', UserController::class)->only(['index', 'store', 'update', 'destroy']);