Laravel 4中的嵌套控制器

时间:2013-06-22 09:29:20

标签: controller laravel laravel-4

我是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'。 我做错了什么?

2 个答案:

答案 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,以便更新类图。