1

我是 laravel4 的新手,在设置嵌套控制器时遇到问题。我在管理员控制器所在的控制器目录中有一个“管理员”子目录。我的管理控制器在我的控制器目录中扩展了一个“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时,我收到一条错误消息,提示“找不到类 'Admin\View'”。我究竟做错了什么?

4

2 回答 2

7

您的控制器的工作方式没有任何问题,只是在 HomeController 中您使用Admin命名空间,然后在索引函数中调用View该类,但该类不是Admin命名空间的一部分,因此您会收到一条错误消息Class Admin\View找不到。

尝试做以下两件事之一:

use View

或者

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

(注意前面的反斜杠View

于 2013-06-22T14:48:13.817 回答
2

Route::get('/', 'Admin\HomeController@index');表示AdminPHP 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,以便更新类映射。

于 2013-06-22T10:13:53.670 回答