Laravel8报错Target class [ImportTransaksiR13_Controller]不存在求解决
问题排查与解决步骤
你遇到的报错是Laravel 8下控制器类加载失败,结合你提供的代码,有以下几个明确的问题需要修正:
1. 路由写法适配Laravel 8规则
Laravel 8开始默认取消了路由文件的控制器命名空间前缀,两种路由写法分别要做对应调整:
- 如果你用
[Controller::class, '方法']的写法,必须在路由文件顶部导入控制器的命名空间:
use App\Http\Controllers\ImportTransaksiR13_Controller;
- 如果你用字符串格式的
控制器@方法写法,需要写完整的命名空间:
Route::get('/transaksiR13', 'App\Http\Controllers\ImportTransaksiR13_Controller@index'); // 其余两个字符串写法的路由也补全相同的命名空间前缀
可选方案:如果要沿用Laravel 7及之前的自动前缀规则,可在app/Providers/RouteServiceProvider.php里找到$namespace属性,取消注释并赋值为protected $namespace = 'App\Http\Controllers';,之后字符串写法的路由就不用写全命名空间。
2. 修正控制器语法错误
你提供的控制器代码末尾多了2个多余的闭合大括号,会导致类解析失败,直接删除即可,修正后的控制器末尾结构应为:
class ImportTransaksiR13_Controller extends Controller { public function index() { // 方法原有内容 } public function export_excel() { // 方法原有内容 } } // 此处删除你代码里多余的两个}
3. 修正控制器内部类名调用错误
- 你已经导入了
use App\TransaksiR13;,但index方法里调用的是Transaksi_r13::all(),类名大小写、下划线不匹配,改为TransaksiR13::all() - 你已经导入了
use App\Exports\TransaksiR13Export;,但export_excel方法里实例化的是new TransaksiExportR13,类名顺序写反,改为new TransaksiR13Export
4. 校验文件名与路径
- 控制器文件必须放在
app/Http/Controllers目录下 - 文件名必须和类名完全一致,为
ImportTransaksiR13_Controller.php,注意大小写匹配(Linux服务器对大小写敏感,写错会加载失败)
5. 重置缓存与自动加载
修改完成后执行以下命令清理缓存、重建自动加载:
php artisan route:clear composer dump-autoload
内容的提问来源于stack exchange,提问作者Lucas Futami
相关产品推荐
相关产品推荐

