Laravel 个命名空间 class 未找到

Laravel namespaces class not found

我是 Laravel 命名空间的新手。

我正在尝试做这样的事情:

namespace App\Controllers; // when I remove this line, everything works fine... I need to include this

class HomeController extends BaseController {

    protected $layout = "layouts.main";

    public function __construct() {
        // some stuff here
    }

    /**
     * Home page.
     * @return View
     */
    public function getHome() {
        // Show the page
        $this->layout->content = View::make('home');
    }
}

但是我遇到了这个奇怪的错误,

Class HomeController does not exist 

这是我的一些 composer.json 东西,

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/libraries",            
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
    ]
}, 

我也执行过,

composer dump-autoload

当我路由这样的东西时,

# Default
Route::get('/', array('as' => 'home', 'uses' => 'HomeController@getHome'));

您是否在尝试使用它的文件中键入 use App\Controllers\HomeController?这基本上包括它。

您没有在 app/controllers 中为控制器使用名称空间。 HomeController 扩展了 BaseController,后者扩展了框架中的 Controller。

如果您要将自定义库包含到框架中,您可能需要使用命名空间。 /app/libraries 例如。

只要您的 routes.php 有一些 url 访问家庭控制器的方法,它就应该可以工作。

Route::get('/home', 'HomeController@index');

HomeController.php:

class HomeController extends BaseController {

    private $myVar;

    public function __construct() {
        // some stuff here
    }

    public function index(){
        return View::make('home');
    }
}

以下是可能发生此错误的一种常见情况:

假设您正在使用 class:

定义路线
Route::get('/home', 'HomeController@getIndex');

Laravel 核心将把那个字符串 ('HomeController@getIndex') 传递给路由 class 深处的一些方法,解析它,实例化 HomeController,然后调用 getIndex。该代码是否包含 use App\Controllers 指令?不太可能,因为这是您创建的东西。基本上,无论 HomeController class 在哪里使用(我不知道它在哪里),PHP 解释器都不知道 class 来自哪里。

解决方案是使用 完全限定的 class 名称。这意味着在字符串中包含完整的命名空间,如下所示:

Route::get('/home', '\App\Controller\HomeController@getIndex');

现在,当 Laravel 尝试实例化 class 时,它拥有找到它所需的一切。

我不确定这是否是问题所在 - 您需要向我们展示发生错误的代码 - 但这是一种可能性。