我是laravel4的新手,并且设置了嵌套控制器。我在控制器目录中有一个“Admin”子目录,其中admin控制器驻留在该目录中。 我的管理员控制器在我的控制器目录中扩展了一个“AdminController”。 我已经设置了像这样的管理控制器
<?php
namespace Admin;
use AdminController;
class HomeController extends AdminController {
public $layout = 'admin.layouts.master';
public function index() {
$this->layout->content = View::make('admin.dashboard');
}
}
和我的routes.php文件
/** Admin Routes **/
Route::group(array('domain' => 'admin.vigap.local'), function()
{
//Dashboard
Route::get('/', 'Admin\HomeController@index');
});
但是当我导航到http://admin.xyz.local时,我收到一条错误消息“未找到”Class'Admin \ View'。 我做错了什么?
答案 0 :(得分:7)
控制器的工作方式没有任何问题,只是在HomeController中使用Admin
命名空间,然后在索引函数中调用View
类,但该类不是Admin
命名空间的一部分,因此您会收到错误消息,指出无法找到Class Admin\View
。
尝试执行以下两项操作之一:
use View
或
$this->layout->content = \View::make('admin.dashboard');
(注意View
前面的反斜杠)
答案 1 :(得分:2)
Route::get('/', 'Admin\HomeController@index');
表示Admin
PHP namespace
,而不是Controllers
目录的子文件夹。
来源:http://laravel.com/docs/controllers
从路由器的角度来看,放置控制器的位置并不重要, 它只是想知道在你注册的路由被请求时需要调用哪个类。
Route::get('/', 'HomeController@index');
应该可以工作,因为类加载器会找到你的HomeController类,无论它在哪里。
来源:http://forums.laravel.io/viewtopic.php?id=9917
但是,您可能已经在控制器目录的根目录中有HomeController
,因此您将有一个类名冲突。我建议您将班级重命名为AdminHomeController
Route::get('/', 'AdminHomeController@index');
另外,添加新类后不要忘记运行composer dump-autoload
,以便更新类图。