2013-06-22 160 views
1

我是laravel4的新手,并且遇到了设置嵌套控制器的问题。我在管理员控制器驻留的控制器目录中有一个“Admin”子目录。 我的管理员控制器在我的控制器目录中扩展了一个“AdminController”。 我已经安装管理控制器这样Laravel 4嵌套控制器

<?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\[email protected]'); 

}); 

但是,当我浏览到http://admin.xyz.local,我得到一个错误说“类‘管理\查看’未找到”。 我在做什么错?

回答

7

没有什么不对您的控制器的作品,它只是在HomeController的使用Admin命名空间的方式,那么在指数函数调用View类,但该类不是Admin命名空间的一部分,因此你会收到一个错误,说Class Admin\View无法找到。

尝试做以下两两件事之一:

use View

$this->layout->content = \View::make('admin.dashboard');

(注意反斜线的View前)

2

Route::get('/', 'Admin\[email protected]');意味着Admin PHP namespace,而不是在Controllers目录的子目录。

来源:http://laravel.com/docs/controllers

从路由器的角度来看,这不要紧,你把你的控制器,它 只想要知道哪些类需要时要求你注册的路线被调用。

Route::get('/', '[email protected]');应该工作,因为类加载器会找到您的HomeController类,无论它在哪里。

来源:http://forums.laravel.io/viewtopic.php?id=9917

然而,你可能已经有一个HomeController在控制器的根目录下,这样你就会有一个类名冲突。我建议你你的类重命名为AdminHomeController

Route::get('/', '[email protected]');

另外,不要忘了添加新类之后运行composer dump-autoload,使类映射被更新。

+0

+1作曲家dump-自动加载...你能告诉我为了更好地理解这些信息需要阅读的内容吗,每次运行时都需要运行它控制器?那么控制器没有按照他们在Laravel 3中的方式注册? – Neo

+0

仅在添加新类(新控制器)时。作曲家维护一个PHP文件列表作为快速自动加载的类,所以当你添加新的类时,你必须刷新作曲者的自动加载文件。我想Laravel也会尝试根据他们的名字和你在laravel配置中设置的路径找到你的控制器。 –