在 laravel 4 中找不到类控制器

Posted

技术标签:

【中文标题】在 laravel 4 中找不到类控制器【英文标题】:Class Controller not found in laravel 4 【发布时间】:2021-10-24 09:16:40 【问题描述】:

我是 Laravel 的初学者,当我尝试使用 Controller 时出现此错误

Illuminate\Contracts\Container\BindingResolutionException 目标类 [PostsController] 不存在。 http://127.0.0.1:8000/posts

routes 目录包含要路由的 web.php,我正在使用

Route::get('/posts', 'PostsController@index');

重定向到类PostsController

<?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    
    class PostsController extends Controller
    
        public function index() 
            echo "asdas";
        
    

【问题讨论】:

一个小问题:如果你是 Laravel 的初学者,为什么选择 Laravel 4?这是一个非常旧的版本,不再支持。我建议您使用最新版本。 运行(作曲家 dumpautoload) @sajjad 它是 composer dump-autoload ,我认为这不会解决问题。不确定。 确保文件被正确命名并在正确的文件夹中:app/Http/Controllers/PostsController.php Laravel 版本? 【参考方案1】:

在深入研究你的问题之前,你真的不应该使用 Laravel 4。我们几乎是第 9 版。

Laravel 4 缺少功能、安全修复和当前 PHP 版本支持(是的,在撰写本文时,所有版本

话虽如此,您可能有充分的理由,例如从事难以更新的遗留项目。

你可以做的是在你的路由文件中使用完全限定的命名空间。

Route::get('/posts', '\App\Http\Controllers\PostsController@index');

此外,请三重检查您是否使用 Laravel 4。您遇到的问题也可能是由最新的 Laravel 更新(版本 8)引起的,其中默认命名空间已从 App\Providers\RouteServiceProvider 文件中删除。

如果你在 Laravel 8 上犯了一个错误,那么只需使用以下符号:

Route::get('/posts', [\App\Http\Controllers\PostsController::class,'index']);

[编辑]

如 cmets 中所述,您还可以在路由文件中取消注释 // protected $namespace = 'App\\Http\\Controllers';。当然,这适用于 Laravel 8,所以如果您使用的是 Laravel 4,请忽略此编辑。

【讨论】:

为了快速修复具有大量路由的现有应用程序,您可以重新添加默认命名空间。 (我目前使用该解决方案,并在更改应用程序时将所有路由更改为新语法)

以上是关于在 laravel 4 中找不到类控制器的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 5 中找不到用户类

在 laravel 5 中找不到类控制器

在 Laravel 中找不到类“App\Http\Controllers\Excel”

在 laravel 5.4 中找不到类“Illuminate\Foundation\Application”

Laravel 4:致命错误:在 autoload.php 中找不到类 'Patchwork\Utf8\Bootup'

在基本 Laravel 5.4 教程中找不到类“任务”