在 Laravel 5.1 中获取“找不到类 'app\Http\Controllers\Controller'”
Posted
技术标签:
【中文标题】在 Laravel 5.1 中获取“找不到类 \'app\\Http\\Controllers\\Controller\'”【英文标题】:Getting "Class 'app\Http\Controllers\Controller' not found" in Laravel 5.1在 Laravel 5.1 中获取“找不到类 'app\Http\Controllers\Controller'” 【发布时间】:2017-03-27 08:33:34 【问题描述】:我对 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'
我该如何解决这个错误?
【问题讨论】:
你是通过 php artisan 生成还是手动创建的?你能像 php artisan make:controller TestController 一样试试吗?因此,您无需担心命名空间。它会自动生成。 【参考方案1】:让我们一步一步来。
1。检查 composer.json 上的自动加载指令
在您的项目根目录中打开composer.json
文件。找到autoload
部分。它应该是这样的:
...
"autoload":
"classmap": [
"database"
],
"psr-4":
"App\\": "app/"
,
确保您在psr-4
选项下有此配置:
"App\\": "app/"
此配置告诉作曲家我们要使用psr-4 约定自动加载app
目录中的所有类,并将其放在App
命名空间下。
2。更新您的控制器
首先,您的控制器文件名应该是驼峰式格式。所以我们必须将其重命名为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
的内容。
【讨论】:
【参考方案2】:使用正确的命名空间:
namespace App\Http\Controllers;
// Remove: use app\Http\Controllers\Controller;
class testController extends Controller
【讨论】:
你的控制器在app\Http\Controllers
,对吧?
是的,它在控制器中,与“testController”相同。
您删除了use app\Http\Controllers\Controller;
行吗?
是的,我做了,但没有任何区别。顺便说一句,我刚刚注意到我的 Controller.php 具有路径“App\Http\Controllers\Auth\Controller.php”。这里对代码有影响吗?
如果您仍然收到app\..
消息,那么您没有删除该行或没有更改命名空间或extends
部分。上面的代码来自标准 Laravel 控制器。仔细检查一切。【参考方案3】:
根据我在 Laravel 项目中的经验,命名空间以命名空间中使用的 App
的大写 A
开头,您应该尝试将代码更改为:
namespace App\Http\Controllers;
class testController extends Controller
还要检查控制器 - App\Http\Controllers\Controller
是否位于代码中提到的相同命名空间中。
【讨论】:
实际上 Controller.php 位于 'App\Http\Controllers\Auth\Controller.php'。我认为这对命名空间没有任何影响,是吗? 我认为字母的大小写根据不同的操作系统而有所不同,例如在 mac 中它反应正确,而在 Ubuntu 中它反应错误,等等其他操作系统也是如此【参考方案4】:将它包含在控制器文件的顶部。这为我解决了问题。
namespace App\Http\Controllers;
【讨论】:
【参考方案5】:在某些情况下,问题是框架无法实例化您给定的控制器类。例如,如果您使用 Controllers
下的子文件夹,并且在扩展 Controller.php
类时,您没有为该定义提供 use
语句*,则可能会发生这种情况。其他运行时错误也可能导致此问题。
*现在需要,因为您自己的控制器不再位于 Controller
文件夹的根目录下。
【讨论】:
以上是关于在 Laravel 5.1 中获取“找不到类 'app\Http\Controllers\Controller'”的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Laravel 5.1 在 IronMQ 中获取排队作业的数量?
在 Laravel 5.1 中获取“找不到类 'app\Http\Controllers\Controller'”