找不到 Laravel 命名空间类


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 

这是我的一些作曲家.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'));

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

假设您正在使用该类定义路由:

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

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

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

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

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

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

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

不要在应用/控制器中使用控制器的命名空间。HomeController 扩展了 BaseController,它扩展了框架中的 Controller。

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

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

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

首页控制器.php:

class HomeController extends BaseController {
    private $myVar;
    public function __construct() {
        // some stuff here
    }
    public function index(){
        return View::make('home');
    }
}