【问题标题】:Class App\Http\Controllers\homeController does not exist类 App\Http\Controllers\homeController 不存在
【发布时间】:2022-01-03 23:52:53
【问题描述】:

我正在使用 laravel 5,在 rutes.php 我有这个代码:

Route::get('about',"homeController@about");

在 App\Http\Controllers\ 我有文件 homeController.php 包含:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller as BaseController;

class homeController extends BaseController{
public function about(){
    return view::make('about');
}
}

但它会引发此错误:App\Http\Controllers\homeController 类不存在。 我该如何解决?

这是项目和控制器的结构:

【问题讨论】:

  • 如何更改命名空间 App\Http\Controllers\homeController;作为命名空间 App\Http\Controllers;
  • @vural 它不起作用
  • 不应该是HomeController吗?
  • 当我手动将controller 添加到项目中时,我想我应该运行composer dump-autoload

标签: php laravel


【解决方案1】:

全部更改

homeController

HomeController

【讨论】:

    【解决方案2】:

    首先,请检查您是否正确写入了控制器的名称。 如果是,有3种方法:

    1. Route::get('/about', 'App\Http\Controllers\homeController@about'); 写下你的控制器所在的所有路径。

    2. Route::get('/about', [HomeController::class, 'about');

      • 转到 Providers 文件夹中的文件 RouteServiceProvider.php
      • 搜索//protected $namespace = 'App\\Http\\Controllers'; (你会在评论中找到它)
      • 删除//的评论并保存。 使用这种方法,您将能够直接使用控制器的名称,而无需 写下所有路径。

    【讨论】:

    • 在 IDE 中使用第二种方法将有助于线程所有者看到控制器类必须以您指出的大写字母开头。
    【解决方案3】:
    <?php
    
    namespace App\Http\Controllers;
    
    use App\Http\Controllers\Controller as BaseController;
    
    class homeController extends BaseController{
      public function about(){
        return view::make('about');
      }
    }
    

    【讨论】:

    • 尝试从你的 laravel 项目目录运行命令,php artisan cache:clear
    • 这个命令清除了缓存,但是没有解决错误
    • @ako 你能跑吗php artisan view:clear, php artisan optimize
    【解决方案4】:
    <?php
    
    namespace App\Http\Controllers;
    
    use App\Http\Controllers\Controller as BaseController;
    
    class homeController extends BaseController{
      public function about(){
        return view::make('about');
      }
    }
    

    应该可以完美运行。你确定文件名是homeController.php 吗?

    【讨论】:

    • 但是在你的截图中here is structure of the project and controllers :文件名以大写字母开头
    • Route::get('about',"HomeController@about");改成Route::get('about',"homeController@about");试试
    • 如果您想弄乱项目结构,请继续。如果您有充分的理由这样做,那么,请继续。但如果不是,类应该以大写字母开头。
    【解决方案5】:

    我在 Home 控制器上遇到了类似的问题,在我的情况下,我看到路由配置如下:

    Route::get('/home',"homeController@index"); 
    

    当我将上面的代码更改为以下代码时,它就可以工作了。

    Route::get('/home',"App\Http\Controllers\HomeController@about");
    

    在你的情况下,首先检查拼写,它应该是 HomeController 还是 homeController。

    您可以将您的路线代码更改为以下

    所以你可以尝试更改以下代码

    Route::get('about',"HomeController@about");
    

    Route::get('about', 'App\Http\Controllers\HomeController@about');
    

    Route::get('/about', 'App\Http\Controllers\HomeController@about');
    

    希望这会奏效。

    【讨论】:

      【解决方案6】:

      这可能是由于以下两个原因:

      1. 错字
      2. Laravel 缓存

      1) 类型错误 对于此检查,请检查您的 HomeController 文件名和该文件中的类名。两者都应该区分大小写。

      HomeController.php

      HomeController 扩展

      2) Laravel 缓存 Laravel 使用以前的配置存储文件缓存。要刷新缓存,请在命令窗口中执行此命令,然后重试

      php artisan cache:clear
      php artisan view:clear
      php artisan optimize
      

      希望解决了!

      【讨论】:

        【解决方案7】:

        对于HomeController.php

        <?php
        
        namespace App\Http\Controllers;
        
        use Illuminate\Http\Request;
        
        class HomeController extends Controller
        {
            public function welcome()
            {
                return view('welcome');
            }
        }
        

        对于web.php

        <?php
        
        use Illuminate\Support\Facades\Route;
        use App\Http\Controllers\HomeController;
        
        Route::get('/', [HomeController::class, 'welcome']);
        

        对我有用

        【讨论】:

          【解决方案8】:

          如下更改您的路由:

          use App\Http\Controllers\HomeController;
          
          Route::get('/about',  [HomeController::class, 'index'])->name('home');
          

          有关更多信息,请查看此页面: https://laravel.com/docs/8.x/routing

          【讨论】:

            【解决方案9】:

            是的。这是正确的,因为您没有为路线中的动作提供正确的路径。您可以更新路径的核心文件或在路径中手动提供。例如 你有

            Route::get('about',"homeController@about");
            

            试试这条路

            Route::get('/about', [App\Http\Controllers\homeController::class,'about']);
            

            或者你可以输入路由

            Route::get('/about', 'App\Http\Controllers\homeController@about');
            

            此外,您可以检查控制器功能中是否有正确的代码。

            【讨论】:

              【解决方案10】:

              您正在尝试 Laravel 7.x 和之前的路由模式。请参阅 8.x 文档。

              新语法使用 [HomeController::class, 'index'] 或者您需要在 Controller 名称之前添加命名空间,例如 App\Http\Controllers\HomeController

              【讨论】:

                【解决方案11】:

                请更新您的路线

                使用 App\Http\Controllers\HomeController;

                Route::get('/about', [HomeController::class, 'about']);

                【讨论】:

                  猜你喜欢
                  • 2020-12-29
                  • 1970-01-01
                  • 2016-12-25
                  • 2017-12-23
                  • 2020-05-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-03-05
                  • 2016-09-16
                  相关资源
                  最近更新 更多