繁体   English   中英

类 App\Http\Controllers\homeController 不存在

[英]Class App\Http\Controllers\homeController does not exist

我正在使用 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 类不存在。 我该如何解决?

这是项目和控制器的结构: 在此处输入图像描述

全部更改

homeController

HomeController

首先,检查您是否正确写入了控制器名称。 如果是,有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'; (你会在评论中找到它)
    • 删除注释的//并保存。 使用此方法,您将能够直接使用控制器的名称,而无需编写所有路径。
<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller as BaseController;

class homeController extends BaseController{
  public function about(){
    return view::make('about');
  }
}
<?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吗?

我在 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');

希望这会奏效。

它可能由于以下两个原因而发生:

  1. 打字错误
  2. Laravel 缓存

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

家庭控制器.php

HomeController扩展

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

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

希望解决!。

对于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']);

它对我有用

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

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

试试这条路线

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

或者你可以输入 route 作为

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

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

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

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

更改您的路由,如下所示:

use App\Http\Controllers\HomeController;

Route::get('/about',  [HomeController::class, 'index'])->name('home');

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

通过添加来更新路径的路径。

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

请更新您的路线

使用 App\\Http\\Controllers\\HomeController;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM