首页 文章

在Laravel 5.1中获得“Class 'app\Http\Controllers\Controller' not found”

提问于
浏览
3

我对Laravel很新,当我遇到这个错误时,我正在阅读教程 . 这是我在'testController.php'中的代码 .

<?php

namespace app\Http\Controllers;

use app\Http\Controllers\Controller;

class testController extends \app\Http\Controllers\Controller {

public function getAbout()
{
    return view('Learning.about') ;
}

public function getHome()
{
    return view('Learning.index');
}

}

这是我的'routes.php' .

<?php
Route::get('test', [
   'as' => 'test', 
   'uses' => 'testController@getHome',
]);

Route::get('about', [
    'as' => 'about', 
    'uses' => 'testController@getAbout',
]);

我收到此错误:

未找到类'app \ Http \ Controllers \ Controller'

我该如何解决这个错误?

4 回答

  • 0

    让我们一步一步来看看 .

    1.检查composer.json上的autoload指令

    在项目根目录中打开 composer.json 文件 . 找到 autoload 部分 . 应该看起来像这样:

    {
        ...
        "autoload": {
            "classmap": [
                "database"
            ],
            "psr-4": {
                "App\\": "app/"
            }
        },
    }
    

    确保在 psr-4 选项下具有此配置:

    "App\\": "app/"
    

    此配置告诉作曲家我们要使用psr-4约定自动加载 app 目录中的所有类,并将其放在 App 名称空间下 .

    2.更新您的控制器

    首先,您的控制器文件名应该是CamelCase样式 . 所以我们必须将其重命名为 TestController.php . 确保它保存在 app/Http/Controllers 目录下 .

    现在打开你的 TestController.php 文件,我们必须像这样大写命名空间和类名:

    <?php
    
    namespace App\Http\Controllers;
    
    use App\Http\Controllers\Controller;
    
    class TestController extends Controller {
        public function getAbout()
        {
            return view('Learning.about') ;
        }
    
        public function getHome()
        {
            return view('Learning.index');
        }
    }
    

    请注意,我们也改变了这一行:

    class testController extends \app\Http\Controllers\Controller
    

    成:

    class TestController extends Controller
    

    由于我们已经导入了基类 Controller 类,因此我们不必指定完全限定名 . 我们使用 use 关键字导入了 Controller 类:

    use App\Http\Controllers\Controller;
    

    保存 TestController.php 文件 .

    3.更新您的路线文件

    现在我们必须更新 app\Http\routes.php 文件 . 我们只需要大写控制器名称:

    <?php
    
    Route::get('test', ['uses' => 'TestController@getHome', 'as' => 'test']);
    
    Route::get('about', ['uses' => 'TestController@getAbout', 'as' => 'about']);
    

    4更新自动装带器

    现在最后要做的事情 . 打开终端/命令提示符 . 转到项目目录并运行以下命令:

    composer dump-autoload
    

    此命令将更新自动加载器文件(Read more here) .

    现在,如果您打开浏览器并点击 /test 路线,您应该会看到 resources/views/Learning/index.blade 中的内容 .

  • 5

    使用正确的名称:

    namespace App\Http\Controllers;
    
    // Remove: use app\Http\Controllers\Controller;
    
    class testController extends Controller {
    
  • 0

    根据我在Laravel项目中的经验,命名空间以命名空间中使用的 AA 开头,您应该尝试将代码更改为:

    namespace App\Http\Controllers;
    
    class testController extends Controller { }
    

    还要检查控制器 - App\Http\Controllers\Controller 是否位于代码中提到的相同名称空间中 .

  • 0

    将其包含在Controller文件的顶部 . 这为我修好了 .

    namespace App\Http\Controllers;
    

相关问题