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