2013-06-22 159 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配置中設置的路徑找到你的控制器。 –