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 时,它拥有找到它所需的一切。
我不确定这是否是问题所在 - 您需要向我们展示发生错误的代码 - 但这是一种可能性。
我是 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 时,它拥有找到它所需的一切。
我不确定这是否是问题所在 - 您需要向我们展示发生错误的代码 - 但这是一种可能性。