在 Laravel 5.1 中获得 "Class 'app\Http\Controllers\Controller' not found"
Getting "Class 'app\Http\Controllers\Controller' not found" in Laravel 5.1
我是 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',
]);
我收到这个错误:
Class 'app\Http\Controllers\Controller' not found
我该如何解决这个错误?
使用正确的命名空间:
namespace App\Http\Controllers;
// Remove: use app\Http\Controllers\Controller;
class testController extends Controller {
根据我在Laravel项目中的经验,命名空间以App
的大写A
开头,在命名空间中使用,您应该尝试将代码更改为:
namespace App\Http\Controllers;
class testController extends Controller { }
还要检查控制器 - App\Http\Controllers\Controller
是否与代码中提到的名称空间相同。
让我们一步一步来。
1。检查 composer.json
上的自动加载指令
打开项目根目录中的 composer.json
文件。找到 autoload
部分。它应该看起来像这样:
{
...
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\": "app/"
}
},
}
确保在 psr-4
选项下有此配置:
"App\": "app/"
此配置告诉作曲家我们要使用 psr-4 约定自动加载 app
目录中的所有 classes 并将其放置在 App
命名空间下。
2。更新您的控制器
首先,您的控制器文件名应采用 CamelCase 样式。所以我们不得不将它重命名为TestController.php
。确保它保存在 app/Http/Controllers
目录下。
现在打开您的 TestController.php
文件,我们必须将命名空间和 class 名称大写,如下所示:
<?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
class,所以我们不必指定完全限定名称。我们使用 use
关键字导入 Controller
class:
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
的内容。
将其包含在您的 Controller 文件的顶部。这为我修好了。
namespace App\Http\Controllers;
在某些情况下,问题是框架无法实例化给定的控制器 class。例如,如果您正在使用 Controllers
下的子文件夹,并且当您扩展 Controller.php
class 时,您没有提供 use
声明,就会发生这种情况定义*。其他 运行 次错误也可能导致此问题。
*现在需要,因为您自己的控制器不再位于 Controller
文件夹的根目录中。
我是 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',
]);
我收到这个错误:
Class 'app\Http\Controllers\Controller' not found
我该如何解决这个错误?
使用正确的命名空间:
namespace App\Http\Controllers;
// Remove: use app\Http\Controllers\Controller;
class testController extends Controller {
根据我在Laravel项目中的经验,命名空间以App
的大写A
开头,在命名空间中使用,您应该尝试将代码更改为:
namespace App\Http\Controllers;
class testController extends Controller { }
还要检查控制器 - App\Http\Controllers\Controller
是否与代码中提到的名称空间相同。
让我们一步一步来。
1。检查 composer.json
上的自动加载指令打开项目根目录中的 composer.json
文件。找到 autoload
部分。它应该看起来像这样:
{
...
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\": "app/"
}
},
}
确保在 psr-4
选项下有此配置:
"App\": "app/"
此配置告诉作曲家我们要使用 psr-4 约定自动加载 app
目录中的所有 classes 并将其放置在 App
命名空间下。
2。更新您的控制器
首先,您的控制器文件名应采用 CamelCase 样式。所以我们不得不将它重命名为TestController.php
。确保它保存在 app/Http/Controllers
目录下。
现在打开您的 TestController.php
文件,我们必须将命名空间和 class 名称大写,如下所示:
<?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
class,所以我们不必指定完全限定名称。我们使用 use
关键字导入 Controller
class:
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
的内容。
将其包含在您的 Controller 文件的顶部。这为我修好了。
namespace App\Http\Controllers;
在某些情况下,问题是框架无法实例化给定的控制器 class。例如,如果您正在使用 Controllers
下的子文件夹,并且当您扩展 Controller.php
class 时,您没有提供 use
声明,就会发生这种情况定义*。其他 运行 次错误也可能导致此问题。
*现在需要,因为您自己的控制器不再位于 Controller
文件夹的根目录中。