在Laravel 5.1中找不到“Class'app \ Http \ Controllers \ Controller'

时间:2016-11-13 16:45:37

标签: php laravel laravel-5 laravel-routing

我对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'

如何解决此错误?

5 个答案:

答案 0 :(得分:5)

让我们一步一步地完成这一过程。

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课程,因此我们不必指定完全限定名称。我们使用Controller关键字导入了use类:

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的内容。

答案 1 :(得分:0)

使用正确的命名空间:

namespace App\Http\Controllers;

// Remove: use app\Http\Controllers\Controller;

class testController extends Controller {

答案 2 :(得分:0)

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

namespace App\Http\Controllers;

class testController extends Controller { }

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

答案 3 :(得分:0)

将此内容包括在Controller文件的顶部。这为我解决了这个问题。

namespace App\Http\Controllers;

答案 4 :(得分:0)

在某些情况下,问题是框架无法实例化给定的控制器类。例如,如果您使用 Controllers 下的子文件夹,并且在扩展 Controller.php 类时,您没有为该定义提供 use 语句*,则可能会发生这种情况。其他运行时错误也可能导致这种情况。

*现在是必需的,因为您自己的控制器不再位于 Controller 文件夹的根目录中。