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