未找到Laravel名称空间类

时间:2015-01-08 14:11:28

标签: php laravel-4 namespaces

我是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'));

3 个答案:

答案 0 :(得分:2)

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

想象一下,您正在使用该类定义路线:

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

Laravel核心将把该字符串('HomeController@getIndex')传递给路由类深层的某些方法,解析它,实例化HomeController,然后调用getIndex }。该代码是否包含use App\Controllers指令?不太可能,因为这是你创造的东西。基本上,只要使用HomeController类(并且我不知道它在哪里),PHP解释器就不会知道该类的来源。

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

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您不在app / controllers中为控制器使用名称空间。 HomeController扩展了BaseController,它在框架中扩展了Controller。

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

只要您的routes.php有一些网址可以使用家庭控制器方法,它就可以工作。

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');
    }
}