我对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'
如何解决此错误?
答案 0 :(得分:5)
让我们一步一步地完成这一过程。
在项目根目录中打开composer.json
文件。找到autoload
部分。它应该是这样的:
{
...
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
}
},
}
确保在psr-4
选项下进行此配置:
"App\\": "app/"
此配置告诉作曲家我们要使用psr-4约定自动加载app
目录中的所有类,并将其放在App
命名空间下。
首先,您的控制器文件名应采用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
文件。
现在我们必须更新我们的app\Http\routes.php
文件。我们只需要将控制器名称大写:
<?php
Route::get('test', ['uses' => 'TestController@getHome', 'as' => 'test']);
Route::get('about', ['uses' => 'TestController@getAbout', 'as' => 'about']);
现在最后要做的事情。打开终端/命令提示符。转到项目目录并运行以下命令:
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
文件夹的根目录中。