贝利信息

Laravel 9 路由中控制器类不可见的解决方案

日期:2026-01-13 00:00 / 作者:花韻仙語

laravel 9 默认禁用字符串形式的控制器路由语法(如 `'admintoolscontroller@php'`),必须显式使用数组语法并引入完整命名空间,否则会报错 “target class does not exist”。

在 Laravel 9 中,为提升类型安全与 IDE 支持,框架已正式移除对字符串式控制器路由语法(如 'ControllerName@method')的默认支持。这意味着即使控制器文件存在、命名空间正确、类名无误,仅因路由定义方式不当,就会触发 Target class [AdminToolsController] does not exist 错误。

✅ 正确做法是:使用数组语法 [Controller::class, 'method'],并确保控制器类被正确引入或使用完整命名空间

✅ 推荐写法(清晰、可维护、符合 PSR-4)

// routes/web.php
use App\Http\Controllers\AdminToolsController;

Route::get('/php', [AdminToolsController::class, 'php']);

✅ 替代写法(无需 use 语句,适合单次引用)

// routes/web.php
Route::get('/php', [\App\Http\Controllers\AdminToolsController::class, 'php']);

⚠️ 注意事项:

? 小结:这不是“找不到文件”的问题,而是路由解析机制升级所致。拥抱数组语法不仅能解决当前错误,还能获得更好的静态分析、自动补全和重构支持——这是 Laravel 向更现代 PHP 实践迈出的重要一步。